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

Bash 如何添加';在每行使用awk之前?,bash,awk,Bash,Awk,使用此命令,我可以在每行之前添加“ awk '{print "\""$0}' file 但是我想添加“而不是”,为什么这个命令不起作用 awk '{print "\'"$0}' file 正确的方法是: $ awk -v c="'" '{print c$0}' file 可能是这样吗 awk 'sub(/^/,"\x27")' 如果您喜欢打印: awk '{print "\x27"$0}' 一种解决方案是只对“”使用ASCII码: $ awk '{print "\047"$0}' fi

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

awk '{print "\""$0}' file
但是我想添加
而不是
,为什么这个命令不起作用

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

正确的方法是:

$ awk -v c="'" '{print c$0}' file
可能是这样吗

awk 'sub(/^/,"\x27")'
如果您喜欢打印:

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

一种解决方案是只对
”使用ASCII码:

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

或者使用
sed

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

在bash中,在
'
分隔的字符串中包含
'
,这有点棘手:

您必须终止
'
-字符串,然后将
'
置于引号中,然后重新启动
'
-字符串:

echo 'ab'\''cd'
将打印

ab'cd
并且,将这些知识应用到您的命令中,您需要

awk '{print "'\''"$0}' file
同样的原则:你想要什么

{print "'"$0}
并且必须在
处拆分。因此,您得到了两个部分:
{print”
“$0}
,它们必须包含在
'
中,并用
\
连接起来:

'{print "'\''"$0}'
试试这个:

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

three
XXX

应为调用shell转义字符
,因为它是由它而不是由
awk
处理的。因此,首先必须将其关闭(第二个
'
),然后在shell中转义(
\'
),然后再次打开(第四个
'
)。

您绝对不能在单引号分隔的脚本中使用单引号,因为该引号绝对表示该脚本[段]的结尾。您可以选择:

  • 将脚本作为
    {print“'”$0}
    放入文件“foo”中,并作为以下文件执行:
    awk-f foo file
    ,或
  • 在要打印引号的任何地方使用转义序列
    \047
    awk'{print”\047“$0}”文件
    ,或
  • 将引号保存在变量中:
    awk-v q=\'{print q$0}文件
    ,或
  • 用双引号而不是单引号分隔awk脚本,并转义shell可能关心的任何内容:awk“{print\”'\$0}”文件
  • 退出awk并返回shell,只需获取以下引号:
    awk'{print'\'''''''$0}'文件
  • 上述最后的列表项实际上是AWK脚本(<代码>){打印“< /代码>和<代码>”“$ 0 }”/代码>的2个单独的段,中间有一个shell(<代码> \\代码>),因此当最终结果是通过shell传递到AWK< /Cord>命令执行时,您就可以得到您想要的。 FWIW如果你的脚本超过几行,我会用“1”,否则用“2”或“3”,而“3”是我个人的偏好,但是YMMV。我不会做4或5次

    'one
    'two
    '
    'three