's/abc/xyz/'

's/abc/xyz/'

sed에서 Perl로 전환하려고합니다. 하지만 이 sed 표현을 비슷한 짧은 방법으로 Perl로 어떻게 바꿀 수 있습니까?

sed -n '/patternmatch/s%stuff%changed%p' file

패턴을 검색해야 하며, 패턴이 발견된 경우에만 "stuff"를 "changed"로 바꾸세요.

내가 할 수 있는 유일한 방법은 아래와 같은 if 문을 사용하는 것입니다.

perl -ne 'if ( /patternmatch/ ) { s%stuff%changed%; print }' file

sed만큼 짧을 수 있나요? 어떻게?

PS: 이를 수행하는 방법은 python다음과 같습니다.여기.

답변1

수정자 양식을 사용하십시오 if.

perl -ne 's/stuff/changed/, print if /patternmatch/'

또는 흐름 제어에 and및 를 사용할 수 있습니다 .or

perl -ne '/patternmatch/ and s/stuff/changed/, print'

답변2

's/abc/xyz/'

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

's/patternmatch/stuffchanged/'

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

관련 정보