我有一个文件需要替换以下所有匹配项:
," "\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