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

Yis*_*ang 4 bash awk

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

awk '{print "\""$0}' file
Run Code Online (Sandbox Code Playgroud)

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

awk '{print "\'"$0}' file
Run Code Online (Sandbox Code Playgroud)

Ed *_*ton 6

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

  1. 将脚本放在文件"foo"中,{print "'"$0}然后执行:awk -f foo file,或
  2. \047任何想要打印引号的地方使用转义序列:awk '{print "\047"$0}' file,或
  3. 将报价保存在变量中:awk -v q=\' '{print q$0}' file,或
  4. 使用double而不是单引号来分隔awk脚本并转义shell可能关心的任何内容:awk"{print \"'\"\ $ 0}"file
  5. 退出awk并返回shell只是为了得到报价: awk '{print "'\''"$0}' file

上面的最后一个列表项实际上是两个独立的awk脚本段('{print "''"$0}'),中间有一些shell(\'),所以当最终结果是连接时,shell将它们传递给awk命令执行,你得到你想要的.

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


twa*_*erg 5

或使用sed:

sed -e "s/^/\'/" file
Run Code Online (Sandbox Code Playgroud)