awk - 搜索和替换特殊字符串

awk - 搜索和替换特殊字符串

我正在尝试查找并替换以下字符串:

~|~\N 
pete@computer:~$ cat test.txt 
one~|~two~|~\Nthree

知道管道字符是一个特殊字符,我转义了它。我也转义了下面的转义字符。我的尝试如下:

pete@computer:~$ awk '{gsub(/~\\|~\\\N$/, "~|~"); print}' test.txt 
one~|~two~|~|~Nthree

预期结果是:

one~|~two~|~three

但我在那里得到了额外的“|~”。我究竟做错了什么?

谢谢,皮特

答案1

awk '{ gsub(/~\|~\\N/, "~|~") }1' infile

中的特殊字符需要单转义正则表达式sub()/gsub()/gensub() 函数的参数,您还需要删除$匹配结束锚点。


当您使用 时/~\\|~\\\N$/,它匹配两个正则表达式~\~\N但第二个匹配仅当它位于行尾时才匹配$;因此,根据这些,您只有~\可以根据正则表达式匹配您的输入,并且~\替换为~|~并产生以下输出:

one~|~two~|~|~Nthree
           ^^^  

相关内容