Use o formulário modificador de if
:
perl -ne 's/stuff/changed/, print if /patternmatch/'
ou, você pode usar and
e or
para controle de fluxo:
perl -ne '/patternmatch/ and s/stuff/changed/, print'
Estou tentando migrar para o perl (do sed). Mas como posso substituir essa expressão sed por perl de maneira similar?
sed -n '/patternmatch/s%stuff%changed%p' file
Eu preciso procurar um padrão, e somente quando o padrão for encontrado, substitua "stuff" por "changed".
A única maneira que eu poderia fazer era com uma declaração if que se parece com isso
perl -ne 'if ( /patternmatch/ ) { s%stuff%changed%; print }' file
É possível fazer isso tão curto quanto com sed? Como?
PS: como fazer isso com python
aqui
Use o formulário modificador de if
:
perl -ne 's/stuff/changed/, print if /patternmatch/'
ou, você pode usar and
e or
para controle de fluxo:
perl -ne '/patternmatch/ and s/stuff/changed/, print'
user@unix:~$ echo 'abc' | sed 's/abc/xyz/'
xyz
user@unix:~$ echo 'abc' | perl -pe 's/abc/xyz/'
xyz
user@unix:~$ echo 'abc' > file.txt && cat file.txt
abc
user@unix:~$ sed 's/abc/xyz/' file.txt
xyz
user@unix:~$ perl -pe 's/abc/xyz/' file.txt
xyz
user@unix:~$ echo 'patternmatch' | sed 's/patternmatch/stuffchanged/'
stuffchanged
user@unix:~$ echo 'patternmatch' | perl -pe 's/patternmatch/stuffchanged/'
stuffchanged
user@unix:~$ echo 'patternmatch' > file.txt && cat file.txt
patternmatch
user@unix:~$ sed 's/patternmatch/stuffchanged/' file.txt
stuffchanged
user@unix:~$ perl -pe 's/patternmatch/stuffchanged/' file.txt
stuffchanged
Tags perl sed regular-expression