← retour aux snippets

grep -z: rechercher sur plusieurs lignes

Utiliser grep en mode NUL-data pour faire matcher des motifs sur plusieurs lignes.

objectif

Faire des recherches qui franchissent les fins de lignes (ex: blocs JSON/HTML).

code minimal

tr '\n' '\0' < input.txt | grep -z -o 'BEGIN.*END' | tr '\0' '\n'

utilisation

# avec PCRE (-P) si disponible
tr '\n' '\0' < input.txt | grep -zPo 'BEGIN[\s\S]*?END' | tr '\0' '\n'

variante(s) utile(s)

# sur plusieurs fichiers
find . -type f -name '*.html' -print0 | xargs -0 grep -zPo 'foo[\s\S]*?bar' | tr '\0' '\n'

notes

  • -z traite NUL comme séparateur, permettant des motifs multi-lignes.
  • soyez prudent sur les volumes (peut charger de gros blocs).