Perl - 用不同的匹配替换txt文件中的行

时间:2014-02-19 23:32:36

标签: perl replace line

我今天早上刚刚开始学习Perl,我的主要目标是替换文本行。假设我有以下文本文件;

manufacturer=BMW
manufacturer=Honda
manufacturer=Mercedes
manufacturer=Toyota
manufacturer=Noble
manufacturer=Maserati
manufacturer=Jaguar
manufacturer=Ford

我想替换所有行,以便文本文件看起来像这样;

manufacturer=XXX
manufacturer=XXX
manufacturer=XXX
manufacturer=XXX
manufacturer=XXX
manufacturer=XXX
manufacturer=XXX
manufacturer=XXX

我已经学会了如何用我想要的文本替换与特定情况相匹配的文本行,如下所示;

s/BMW/XXX/ig

但考虑到在这个文件中我有不同的情况,我不想每次都与不同的制造商(本田,梅赛德斯,丰田)一起更新perl代码,然后重新运行代码。当然,必须有一种方法可以简单地搜索以(不用担心制造商)为标志的行

manufacturer=*whatever*

然后用

替换整行
manufacturer=XXX

有人可以说明如何去做这件事吗?

3 个答案:

答案 0 :(得分:4)

我写这个的方式是

s/^manufacturer=\K.+/XXX/

开头的^确保manufacturer=从字符串的开头开始,而不是只在任何地方出现。

\K(对于 Keep )元字符意味着忽略替换中的所有前面的内容,因此模式匹配 ^manufacturer=.+但是仅替换.+

最后,.+匹配字符串末尾的所有内容或尾随换行符(.与换行符不匹配)。

答案 1 :(得分:1)

您需要充分利用正则表达式的全部功能:

s/^manufacturer=\w+/manufacturer=XXX/ig

答案 2 :(得分:0)

正则表达式的作业:

s/manufacturer=.*/manufacturer=XXX/g

根据您的评论,这会匹配=和EOL之间的所有内容,并将其替换为XXX

综合文档here