GNU/Linux >> Tutoriels Linux >  >> Linux

Comment grep pour le contenu après le modèle?

sed -n 's/^potato:[[:space:]]*//p' file.txt

On peut considérer Grep comme un Sed restreint, ou Sed comme un Grep généralisé. Dans ce cas, Sed est un bon outil léger qui fait ce que vous voulez, bien qu'il existe bien sûr plusieurs autres façons raisonnables de le faire.


grep -Po 'potato:\s\K.*' file

-P utiliser l'expression régulière Perl

-o pour n'afficher que la correspondance

\s pour faire correspondre l'espace après potato:

\K pour omettre la correspondance

.* pour faire correspondre le reste de la ou des chaînes


Ou utilisez des assertions regex :grep -oP '(?<=potato: ).*' file.txt


grep 'potato:' file.txt | sed 's/^.*: //'

grep recherche toute ligne contenant la chaîne potato: , puis, pour chacune de ces lignes, sed remplace (s/// - remplacer) n'importe quel caractère (.* ) depuis le début de la ligne (^ ) jusqu'à la dernière occurrence de la séquence : (deux-points suivi d'un espace) avec la chaîne vide (s/...// - remplacer la première partie par la deuxième partie, qui est vide).

ou

grep 'potato:' file.txt | cut -d\   -f2

Pour chaque ligne contenant potato: , cut divisera la ligne en plusieurs champs délimités par un espace (-d\ - d =délimiteur, \ =caractère espace échappé, quelque chose comme -d" " aurait également fonctionné) et imprimez le deuxième champ de chacune de ces lignes (-f2 ).

ou

grep 'potato:' file.txt | awk '{print $2}'

Pour chaque ligne contenant potato: , awk imprimera le deuxième champ (print $2 ) qui est délimité par défaut par des espaces.

ou

grep 'potato:' file.txt | perl -e 'for(<>){s/^.*: //;print}'

Toutes les lignes contenant potato: sont envoyés à un inline (-e ) Script Perl qui prend toutes les lignes de stdin , puis, pour chacune de ces lignes, fait la même substitution que dans le premier exemple ci-dessus, puis l'imprime.

ou

awk '{if(/potato:/) print $2}' < file.txt

Le fichier est envoyé via stdin (< file.txt envoie le contenu du fichier via stdin à la commande de gauche) à un awk script qui, pour chaque ligne contenant potato: (if(/potato:/) renvoie vrai si l'expression régulière /potato:/ correspond à la ligne actuelle), imprime le deuxième champ, comme décrit ci-dessus.

ou

perl -e 'for(<>){/potato:/ && s/^.*: // && print}' < file.txt

Le fichier est envoyé via stdin (< file.txt , voir ci-dessus) à un script Perl qui fonctionne de manière similaire à celui ci-dessus, mais cette fois, il s'assure également que chaque ligne contient la chaîne potato: (/potato:/ est une expression régulière qui correspond si la ligne courante contient potato: , et, si c'est le cas (&& ), puis procède à l'application de l'expression régulière décrite ci-dessus et imprime le résultat).


Linux
  1. Comment récupérer des données Xfs après Rm ?

  2. Grep Comment supprimer l'affichage d'un fichier non correspondant ?

  3. Comment grep avec la sortie couleur

  4. Comment puis-je rechercher un motif multiligne dans un fichier ?

  5. Comment "grep" un flux continu ?

Comment utiliser CherryTree pour la prise de notes

Comment Grep pour plusieurs chaînes, modèles ou mots

Comment trouver une chaîne dans un fichier sous Linux

Comment rediriger la sortie de la commande shell

grep paires de motifs et fichier

Comment puis-je voir du en Go au lieu de Mo sous Linux ?