sed 查找并替换正则表达式

sed 查找并替换正则表达式

我有一个文件需要替换以下所有匹配项:

,"   "\n  to  ,"ZYY"\n
,"ZZY"\n  to  ,"ZYY"\n
,"GMZ"\n  to  ,"FPZ"\n

我正在尝试使用该命令:sed 's/," "/,"ZYY"/g' Packs.txt但它不起作用。

答案1

这似乎可以解决问题:

$ sed -E 's/,"(   |ZZY)"$/,"ZYY"/;s/,"GMZ"$/,"FPZ"/' inputfile

这里最主要的是使用$锚点来标记行尾,而不是搜索\n.

答案2

如果您有需要执行的转换集合,可以将它们放入文件中。然后您可以使用“-f _sed_file_”来处理所有这些。例如,如果您输入的文件类似于此 test.in 文件:

This,"   ",is,a,test
This,too,"ZZY",is,a,test
And,so,"GMZ",is,this

并且您有以下 sed 文件:

s/,"   "/,"ZYY"/g
s/,"ZZY"/,"ZYY"/g
s/,"GMZ"/,"FPZ"/g

您可以运行以下命令:

sed -f test.sed test.in

获得以下输出:

This,"ZYY",is,a,test
This,too,"ZYY",is,a,test
And,so,"FPZ",is,this

答案3

这会将所有三个字符串更改为您想要的内容,并且仅将更改发送到标准输出:

 sed -e 's|,"   "\\n|,"ZYY"\\n|g' -e 's|,"ZZY"\\n|,"ZYY"\\n|g' -e 's|,"GMZ"\\n|,"FPZ"\\n|g' Packs.txt

我使用了整个字符串,而不仅仅是双引号之间的字母,因为您没有指定这些特定字符串是否出现在文件中的其他位置。

一旦您对结果感到满意,您可以使用以下命令来更改文件本身。

sed -i -e 's|,"   "\\n|,"ZYY"\\n|g' -e 's|,"ZZY"\\n|,"ZYY"\\n|g' -e 's|,"GMZ"\\n|,"FPZ"\\n|g' Packs.txt

相关内容