Come posso cercare e sostituire su più righe con Perl?

$ perl --version This is perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi $ echo -e "foo\nbar" > baz.txt $ perl -p -e 's/foo\nbar/FOO\nBAR/m' baz.txt foo bar 

Come posso far funzionare questo ricambio?

È ansible utilizzare l’ -0 per modificare il separatore di input:

 perl -0777pe 's/foo\nbar/FOO\nBAR/' baz.txt 

-0777 imposta il separatore su undef , -0 da solo lo imposta su \0 che potrebbe funzionare per file di testo che non contengono il byte null.

Nota che /m è inutile in quanto la regex non contiene ^$ .

Ha a che fare con l’ -p . Legge input una riga alla volta. Quindi non puoi eseguire un’espressione regolare contro una nuova riga tra due righe perché non corrisponderà mai. Una cosa che puoi fare è leggere tutte le variabili di modifica dell’input $/ e applicare la regexp ad essa. Senso unico:

 perl -e 'undef $/; $s = <>; $s =~ s/foo\nbar/FOO\nBAR/; print $s' baz.txt 

Produce:

 FOO BAR