我正在尝试查找并替换以下字符串:
~|~\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
^^^