使用此命令,我可以"在每一行之前添加。
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 次')。