Sous Windows, en utilisant Powershell, quelles sont les commandes équivalentes à celles de linux head
, tail
, more
, less
et sed
?
Réponses
Trop de publicités?Get-Content
(alias : gc
) est votre option habituelle pour lire un fichier texte. Vous pouvez ensuite filtrer davantage :
gc log.txt | select -first 10 # head
gc -TotalCount 10 log.txt # also head
gc log.txt | select -last 10 # tail
gc -Tail 10 log.txt # also tail (since PSv3), also much faster than above option
gc log.txt | more # or less if you have it installed
gc log.txt | %{ $_ -replace '\d+', '($0)' } # sed
Cela fonctionne assez bien pour les petits fichiers, les plus gros (plus de quelques Mio) sont probablement un peu lents.
Les extensions de communauté PowerShell incluent des applets de commande pour des fichiers spécialisés (par exemple, Get-FileTail).
Voici les manières intégrées de faire head
et tail
. N'utilisez pas de tubes car si vous avez un gros fichier, il sera extrêmement lent. L'utilisation de ces options intégrées sera extrêmement rapide, même pour les fichiers volumineux.
gc log.txt -head 10
gc log.txt -tail 10
gc log.txt -tail 10 -wait # equivalent to tail -f
Si vous avez besoin d'interroger des fichiers journaux volumineux (ou petits) sous Windows, le meilleur outil que j'ai trouvé est le Log Parser 2.2 gratuit de Microsoft. Vous pouvez l'appeler depuis PowerShell si vous le souhaitez et il fera tout le gros du travail pour vous, et très rapidement aussi.
"-TotalCount" dans cette instance répond exactement comme "-head". Vous devez utiliser -TotalCount ou -head pour exécuter la commande comme ça. Mais -TotalCount est trompeur - cela ne fonctionne pas en vous donnant VRAIMENT AUCUN compte...
gc -TotalCount 25 C:\scripts\logs\robocopy_report.txt
Le script ci-dessus, testé dans PS 5.1, est la MÊME réponse que ci-dessous...
gc -head 25 C:\scripts\logs\robocopy_report.txt
Alors, utilisez déjà '-head 25" !