我正在参与一个项目,该项目不使用Perl语言,我希望保持一致性。因此,我想知道是否可以轻松地用Python one-liner替换这个方便的Perl one-liner:
perl -pe 's/pattern/replacement/g' <<< 'expression'
这个程序逐行读取标准输入,将所有正则表达式匹配项pattern
替换为字符串replacement
,并将(可能)修改后的行输出到标准输出。
我正在参与一个项目,该项目不使用Perl语言,我希望保持一致性。因此,我想知道是否可以轻松地用Python one-liner替换这个方便的Perl one-liner:
perl -pe 's/pattern/replacement/g' <<< 'expression'
这个程序逐行读取标准输入,将所有正则表达式匹配项pattern
替换为字符串replacement
,并将(可能)修改后的行输出到标准输出。
你可以使用re.sub
命令行选项-c
运行,但它不像perl
一样美观:
python -c 'import re;print(re.sub(r"<pattern>", "<replacement>", "<string>"))'
如果你想从标准输入(STDIN)中获取输入,你需要使用sys.stdin
,这也意味着你需要导入sys
:
python -c 'import re,sys;print(re.sub(r"<pattern>", "<replacement>", sys.stdin.read()))' <<< '<string>'
% python -c 'import re;print(re.sub(r"foo", "bar", "foobar"))'
barbar
% python -c 'import re,sys;print(re.sub(r"foo", "bar", sys.stdin.read()))' <<< 'foobar'
barbar
一个更现代的Perl一行代码替代品是Ruby,有些人说它就是Perl 6。例如:
ruby -pe 'gsub /[es]/, "X"' <<< 'expression'
由于Python对缩进的依赖,它不适合单行代码,特别是当您需要在代码中使用“if ... else ...”等条件语句时。
sed
通常是替代的标准工具。 - Shawn