我正在尝试从 sed 转向 perl。但是我怎样才能以类似的简短方式用 perl 替换这个 sed 表达式呢?
sed -n '/patternmatch/s%stuff%changed%p' file
我需要搜索一个模式,并且只有当找到该模式时,才用“已更改”替换“东西”。
我能做到的唯一方法是使用 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