如何使用awk在每行之前添加'?

时间:2013-05-10 14:21:25

标签: bash awk

使用此命令,我可以在每行之前添加"

awk '{print "\""$0}' file

但是我想添加'而不是",为什么这个命令不起作用?

awk '{print "\'"$0}' file

7 个答案:

答案 0 :(得分:6)

你绝对不能在单引号分隔的脚本中使用单引号,因为该引号绝对表示该脚本[segment]的结尾。你有的选择是:

  1. 将脚本放在文件“foo”中{print "'"$0}并执行为:awk -f foo file
  2. 在要打印报价的任何位置使用转义序列\047awk '{print "\047"$0}' file
  3. 将报价保存在变量中:awk -v q=\' '{print q$0}' file
  4. 用双引号而不是单引号分隔awk脚本并转义shell可能关心的任何内容:awk“{print \”'\“\ $ 0}”file
  5. 退出awk并返回shell只是为了获得引用:awk '{print "'\''"$0}' file
  6. 上面的最后一个列表项实际上是两个独立的awk脚本段('{print "''"$0}'),中间有一些shell(\')所以当最终结果是串联这些内容由shell传递给awk命令执行,你得到你想要的。

    FWIW我使用“1”如果你的脚本超过几行,“2”或“3”,否则“3”是我个人的偏好但是YMMV。我不会做4或5。

答案 1 :(得分:5)

或使用sed

sed -e "s/^/\'/" file

答案 2 :(得分:4)

在bash中用'分隔的字符串中有一个'有点棘手:

您必须终止' - 字符串,然后必须以引用的方式放置',然后重新启动' - 字符串:

echo 'ab'\''cd'

将打印

ab'cd

并且,将此知识应用于您的命令,您需要

awk '{print "'\''"$0}' file

同样的原则:你想要

{print "'"$0}

并且必须在'分开。因此,您需要获得两部分:{print ""$0},这些部分必须包含在'中并与\'“加入”:

'{print "'\''"$0}'

答案 3 :(得分:2)

一种解决方案是只使用'的ASCII代码:

$ awk '{print "\047"$0}' file

答案 4 :(得分:1)

正确的做法是:

$ awk -v c="'" '{print c$0}' file

答案 5 :(得分:1)

可能就是这样吗?

awk 'sub(/^/,"\x27")'

如果你喜欢print

awk '{print "\x27"$0}'

答案 6 :(得分:0)

试试这个:

awk '$0="'\''"$0'<<XXX
one
two

three
XXX

输出:

'one
'two
'
'three

应该为调用shell转义字符',因为它由awk处理。所以一开始它必须关闭(第二'),然后在shell(\')中转义,然后再次打开(第4 ')。