我一直在寻找一个单行perl命令的时间来放入一个脚本,该脚本将从类似于sed的文件中读取多重替换。
尝试使用multipattern文件对文本文件执行perl单行多图形搜索替换:
文本文件:
apples bananas oranges
blueberries walnuts granola
multipatternfile:
s/blueberries/chocolate/p
s/bananas/raisins/p
使用sed我可以做这个单行:
$ sed -n -f multipatternfile textfile
apples raisins oranges
chocolate walnuts granola
使用perl我试过这个单行:
$ perl -pi -F multipatternfile textfile
syntax error at multipatternfile line 2, near "s/bananas/raisins/p"
Execution of multipatternfile aborted due to compilation errors.
但是perl版本在第二种模式下窒息,无论我在那里使用第二种模式。
格式化模式文件的方式有问题吗?
在你问之前,我不能使用sed,因为sed没有非贪婪的正则表达式。
答案 0 :(得分:-1)
好的,我想出来了:
multipatternfile:
s/blueberries/chocolate/p;
s/bananas/raisins/p;
使用perl,您需要在模式的末尾添加分号:
$ perl -p multipatternfile textfile
apples raisins oranges
chocolate walnuts granola