将字符串替换为特殊的“”

时间:2019-05-30 01:04:40

标签: awk sed gsub

我想使用awk的gsub查找并用特殊符号“”替换字符串。

我尝试使用\甚至\\转义符号,但是我的代码返回>。

awk '{ gsub("%27","'",$1); print $1 }' file.txt

file.txt:

%27SWAY%27

我想将上面的内容替换为“ SWAY”

4 个答案:

答案 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

在基础外壳上打一个洞,并使用带引号的单引号。