J'ai un gros fichier texte, je veux voir les lignes contenant "time spent"
dans ce fichier texte, j'utilise:
grep -in "time spent" myfile.txt
Mais je ne m'intéresse qu'aux lignes après 50000. Dans la sortie, je veux voir les lignes après 50000 et qui contiennent du "temps passé". Y a-t-il un moyen de faire cela?
Vous pouvez le suivre, puis grep:
tail -n +50000 myfile.txt | grep -in "time spent"
Vous pouvez également utiliser sed
. sed
peut être utilisé pour imiter grep
comme ceci:
sed -n 's/pattern/&/p'
Par défaut, sed
imprime chaque ligne même si aucune substitution ne se produit. Les combinaisons de -n
et /p
fait sed
imprimer uniquement les lignes où une substitution s'est produite. Enfin, nous remplaçons pattern
par &
ce qui signifie remplacer pattern
par lui-même. Résultat: nous avons simplement imité grep
.
Maintenant, sed
peut prendre une série de lignes sur lesquelles agir. Dans ton cas:
sed -n '50000,$s/time spent/&/p' myfile.txt
Le format pour spécifier la plage est le suivant: start,end
Nous demandons simplement à sed de travailler de la ligne 50000 à $
ce qui signifie la dernière ligne.
Réponse pour la grepping entre 2 numéros de ligne:
Using sed and grep:
sed -n '1,50000p' someFile | grep < your_string >
Vous pouvez utiliser head
+ grep
et grouper les commandes avec {...}
afin qu'ils partagent la même entrée:
{ head -n 50000 >/dev/null; grep -i PATTERN; } < infile
head
ne consomme pas l'intégralité de l'entrée, il n'obtient que les 50000 premières lignes et les sauvegarde dans /dev/null
; les lignes restantes sont traitées par grep
.
Si vous avez besoin des numéros de ligne ajoutés (comme avec grep -in
) vous pouvez utiliser awk
:
awk 'NR>50000 && tolower($0)~/PATTERN/{print NR ": " $0}' infile