Awk 将字符串替换为特殊的'&引用;

Awk 将字符串替换为特殊的'&引用;,awk,sed,gsub,Awk,Sed,Gsub,我想使用awk的gsub查找字符串并用特殊符号“'”替换它 我尝试用\甚至\\转义符号,但我的代码返回> awk '{ gsub("%27","'",$1); print $1 }' file.txt file.txt: %27SWAY%27 我想将上面的内容替换为“SWAY”在由单引号描述的awk程序中,不能使用单引号 一种解决方法是使用-v将引号字符分配给awk变量: echo '%27SWAY%27'| awk -v q="'" '{ gsub("%27",q,$1); print $

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

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

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

%27SWAY%27

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

在由单引号描述的awk程序中,不能使用单引号

一种解决方法是使用
-v
将引号字符分配给awk变量:

echo '%27SWAY%27'| awk -v q="'" '{ gsub("%27",q,$1); print $1 }' 
'SWAY'
另一种是使用八进制字符转义序列
\047

$ echo '%27SWAY%27'| awk '{ gsub("%27","\047",$1); print $1 }' 
'SWAY'
最后,您可以将awk程序放在单独的文件中,在这种情况下,单引号不会导致问题:

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

$ echo '%27SWAY%27'| awk -f a.awk
'SWAY'

不能在由单引号描述的awk程序中使用单引号

一种解决方法是使用
-v
将引号字符分配给awk变量:

echo '%27SWAY%27'| awk -v q="'" '{ gsub("%27",q,$1); print $1 }' 
'SWAY'
另一种是使用八进制字符转义序列
\047

$ echo '%27SWAY%27'| awk '{ gsub("%27","\047",$1); print $1 }' 
'SWAY'
最后,您可以将awk程序放在单独的文件中,在这种情况下,单引号不会导致问题:

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

$ echo '%27SWAY%27'| awk -f a.awk
'SWAY'

请你也试试下面的

awk '{gsub("%27","\047")} 1'  Input_file
哦,我刚才看到@jas已经有了这个,现在让我添加一个
sed
解决方案

sed 's/%27/'"'"'/g'  Input_file
或者根据@ghoti sir在
sed
中的评论,例如:

sed "s/%27/'/g" input_file

请你也试试下面的

awk '{gsub("%27","\047")} 1'  Input_file
哦,我刚才看到@jas已经有了这个,现在让我添加一个
sed
解决方案

sed 's/%27/'"'"'/g'  Input_file
或者根据@ghoti sir在
sed
中的评论,例如:

sed "s/%27/'/g" input_file

如果BASH是最新版本,则可以使用BASH字符串扩展:

$ echo "%27SWAY%27" | awk $'{gsub("%27","\'",$1); print $1 }' 
'SWAY'

“{..}”前面的“$”解释了awk的“\”。

如果BASH是最近的BASH,则可以使用BASH字符串扩展:

$ echo "%27SWAY%27" | awk $'{gsub("%27","\'",$1); print $1 }' 
'SWAY'
“{..}”前面的“$”解释了awk的“\”。

这可能适合您(GNU-sed):

在底层外壳上戳一个洞,并使用引用的单引号。

这可能适合您(GNU-sed):


在下面的外壳上戳一个洞,并使用一个引用的单引号。

谢谢。我将使用\47使用第二个选项。它似乎比其他两个简单。只要您想在awk中使用一个单引号,请始终使用3位八进制
\047
,因为它可以跨所有awk和所有上下文(regexps vs string、搜索vs replacement、命令行vs file script等)移植<如果代码>\47后面有更多的数字(例如尝试
sub(/%27/,“\471”)
vs
sub(/%27/,“\0471”)
),则代码>\47将失败,即使尝试了,也不要使用十六进制
\x27
,请参阅Thx@EdMorton,修复。谢谢。我将使用\47使用第二个选项。它似乎比其他两个简单。只要您想在awk中使用一个单引号,请始终使用3位八进制
\047
,因为它可以跨所有awk和所有上下文(regexps vs string、搜索vs replacement、命令行vs file script等)移植<如果代码>\47后面有更多的数字(例如,尝试
sub(/%27/,“\471”)
vs
sub(/%27/,“\0471”)
)就会失败,即使尝试了,也不要使用十六进制
\x27
,请参阅Thx@EdMorton,修复。或者,见鬼,
sed“s/%27/'/g”输入文件
。或者,见鬼,
sed“s/%27/'/g”输入文件
。是的。实际上,我在bash脚本中使用了它,$确实起了作用。实际上,我在bash脚本中使用了它,$确实起了作用。