我想使用awk的gsub查找并用特殊符号“”替换字符串。
我尝试使用\甚至\\转义符号,但是我的代码返回>。
awk '{ gsub("%27","'",$1); print $1 }' file.txt
file.txt:
%27SWAY%27
我想将上面的内容替换为“ SWAY”
答案 0 :(得分:4)
在awk程序中不能使用单引号将单引号引起来。
一种解决方法是使用IMEX=1
将引号字符分配给awk变量:
-v
另一种方法是使用八进制字符转义序列echo '%27SWAY%27'| awk -v q="'" '{ gsub("%27",q,$1); print $1 }'
'SWAY'
:
\047
最后,您可以将awk程序放在单独的文件中,在这种情况下,单引号不会引起问题:
$ echo '%27SWAY%27'| awk '{ gsub("%27","\047",$1); print $1 }'
'SWAY'
答案 1 :(得分:2)
请您也可以尝试以下方法。
awk '{gsub("%27","\047")} 1' Input_file
哦,我刚才看到@jas已经有了这个,让我现在添加一个sed
解决方案。
sed 's/%27/'"'"'/g' Input_file
或者按照@ghoti先生的评论可以在sed
中使用,例如:
sed "s/%27/'/g" input_file
答案 2 :(得分:1)
如果您的BASH是最新的,则可以使用BASH字符串扩展:
$ echo "%27SWAY%27" | awk $'{gsub("%27","\'",$1); print $1 }'
'SWAY'
“ {..}”前面的“ $”解释awk的“ \”。
答案 3 :(得分:1)
这可能对您有用(GNU sed):
sed 's/%27/'\''/g' file
在基础外壳上打一个洞,并使用带引号的单引号。