← retour aux snippets

perl -0777: remplacement multi-ligne robuste

Utiliser Perl en mode slurp (-0777) pour faire des remplacements multi-lignes sûrs.

objectif

Effectuer des substitutions qui traversent des retours à la ligne (indisponible en sed POSIX).

code minimal

# remplacer un bloc entre balises
perl -0777 -pe 's/(?s)BEGIN\n.*?\nEND/BEGIN\n...remplace...\nEND/g' file.txt > out.txt

utilisation

# mise à jour d'une section YAML
perl -0777 -pe 's/(?s)(^settings:\n).*?(^# end-settings$)/$1 . "  retry: 3\n" . $2/meg' config.yml > config.new.yml

variante(s) utile(s)

# in-place avec sauvegarde
perl -0777 -i.bak -pe 's/foo\nbar/baz\nqux/g' file.txt

notes

  • l’option (?s) active le dotall (’.’ match aussi les sauts de ligne).
  • -0777 lit tout le fichier en une seule chaîne.