如何逃避awk中的单引号

时间:2012-03-27 23:06:49

标签: awk

我想做以下

awk 'BEGIN {FS=" ";} {printf "'%s' ", $1}'

但是以这种方式逃避单引号不起作用

awk 'BEGIN {FS=" ";} {printf "\'%s\' ", $1}'

怎么做?谢谢你的帮助。

6 个答案:

答案 0 :(得分:129)

这可能就是你要找的东西:

awk 'BEGIN {FS=" ";} {printf "'\''%s'\'' ", $1}'

也就是说,使用'\''关闭开头',然后通过转义它来打印文字',最后再次打开'

答案 1 :(得分:67)

使用\x27

表示单引号

喜欢

awk 'BEGIN {FS=" ";} {printf "\x27%s\x27 ", $1}'

Source

答案 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}'

为您节省一些打字的时间。 :)