使用此命令,我可以"
在每一行之前添加。
awk '{print "\""$0}' file
但是我想添加'
而不是"
,为什么这个命令不起作用?
awk '{print "\'"$0}' file
您绝对不能在单引号分隔的脚本中使用单引号,因为该引号绝对表示该脚本 [segment] 的结尾。您拥有的选项是:
{print "'"$0}
并执行为:awk -f foo file
,或\047
在要打印引号的任何地方使用转义序列: awk '{print "\047"$0}' file
,或awk -v q=\' '{print q$0}' file
,或awk '{print "'\''"$0}' file
上面的最后一个列表项实际上是 awk 脚本 ('{print "'
和'"$0}'
) 的 2 个单独段,中间有一点 shell ( \'
) 所以当最终结果是连接这些段时,shell 将它们传递给awk
命令执行,你会得到你想要的.
FWIW 如果您的脚本超过几行,我将使用“1”,否则使用“2”或“3”,“3”是我的个人偏好,但 YMMV。我不会做4或5。
或使用sed
:
sed -e "s/^/\'/" file
在bash 中'
使用'
-delimited 字符串有点棘手:
您必须终止'
-string,然后必须将其放在'
引号中,然后重新启动'
-string:
echo 'ab'\''cd'
将打印
ab'cd
并且,将这些知识应用到您的命令中,您需要
awk '{print "'\''"$0}' file
相同的原则:你想要
{print "'"$0}
并且必须在'
. 所以你得到 2 个部分:{print "
并且"$0}
必须包含在其中'
并与 a 一起“加入” \'
:
'{print "'\''"$0}'
一种解决方案是仅使用 ASCII 代码'
:
$ awk '{print "\047"$0}' file
可能是这种方式?
awk 'sub(/^/,"\x27")'
如果你喜欢print
:
awk '{print "\x27"$0}'
正确的做法是:
$ awk -v c="'" '{print c$0}' file
尝试这个:
awk '$0="'\''"$0'<<XXX
one
two
three
XXX
输出:
'one
'two
'
'three
该字符'
应该为调用 shell 转义,因为它是由它而不是由awk
. 所以首先它必须关闭(第 2 次'
),然后在 shell 中转义(第 4 次) \'
,然后再次打开(第 4 次'
)。