使用此命令,我可以在每行之前添加"
。
awk '{print "\""$0}' file
但是我想添加'
而不是"
,为什么这个命令不起作用?
awk '{print "\'"$0}' file
答案 0 :(得分:6)
你绝对不能在单引号分隔的脚本中使用单引号,因为该引号绝对表示该脚本[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}'
),中间有一些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 '
)。