'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

関連情報