我想做以下
awk 'BEGIN {FS=" ";} {printf "'%s' ", $1}'
但是以这种方式逃避单引号不起作用
awk 'BEGIN {FS=" ";} {printf "\'%s\' ", $1}'
怎么做?谢谢你的帮助。
答案 0 :(得分:129)
这可能就是你要找的东西:
awk 'BEGIN {FS=" ";} {printf "'\''%s'\'' ", $1}'
也就是说,使用'\''
关闭开头'
,然后通过转义它来打印文字'
,最后再次打开'
。
答案 1 :(得分:67)
答案 2 :(得分:30)
另一种选择是将单引号作为awk变量传递:
awk -v q=\' 'BEGIN {FS=" ";} {printf "%s%s%s ", q, $1, q}'
字符串连接的简单示例:
# Prints 'test me', *including* the single quotes.
$ awk -v q=\' '{print q $0 q }' <<<'test me'
'test me'
答案 3 :(得分:12)
awk 'BEGIN {FS=" "} {printf "\047%s\047 ", $1}'
答案 4 :(得分:1)
对于小型脚本来说,使其可读性的一种可选方法是使用这样的变量:
awk -v fmt="'%s'\n" '{printf fmt, $1}'
在不得不多次在输出中产生单引号字符并且\ 047使其完全不可读的情况下,我发现它很方便
答案 5 :(得分:0)
当您在命令行中使用 awk 时,您不必使用 BEGIN 块来定义字段分隔符 (FS),您只能使用 -F" " 像:
awk -F" " {printf "\047%s\047 ", $1}'
为您节省一些打字的时间。 :)