Comment puis-je rechercher deux phrases différentes lorsqu'elles se trouvent sur deux lignes différentes à l'aide d'une seule commande grep
?
Par exemple
Ligne 1: C'est un bonbon.
Ligne 2: citron.
Je l'ai utilisé mais aucun résultat
grep "sweet.*lemon" file_type
Pour utiliser grep
pour deux lignes différentes, recherchez les deux modèles.
$ grep -e sweet -e lemon file_type
This is a sweet
lemon.
Ou utilisez l'alternance
$ grep -E 'sweet|lemon' file_type
This is a sweet
lemon.
Pour obtenir la ligne suivante après un modèle, vous pouvez utiliser l'option de contexte
$ grep -A1 sweet file_type
This is a sweet
lemon.
Mais si vous recherchez explicitement un modèle multiligne, c'est délicat car grep
pense en lignes ... . Votre .*
interceptera tout ce qui se situe entre "sweet" et "citron" sur la ligne . Nous pouvons obtenir "citron" sur la ligne suivante avec -P
, en utilisant \n
pour faire correspondre la nouvelle ligne et en indiquant à grep
le fichier est null, séparé par -z
:
$ grep -zPo 'This is a sweet\nlemon' file_type
This is a sweet
lemon.
-E
Utilisez des expressions régulières étendues (utiliser le caractère |
pour une alternance sans avoir besoin de l'échapper)-An
Imprime des lignes supplémentaires après le motif, n étant le nombre de lignes de fin à imprimer.-P
Utilisez des expressions régulières de style Perl ("expérimental" dans grep
- installez pcregrep
à la place pour une meilleure prise en charge des expressions rationnelles Perl)-z
Utilisez le caractère nul en tant que séparateur (dans ce cas, faites semblant, mais grep
prendra notre mot pour cela)-o
n'imprime que la partie correspondanteComme ça:
grep "sweet\|lemon"