如何逃避awk中的单引号

问题描述 投票:85回答:5

我想做以下事情

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

但是以这种方式逃避单引号是行不通的

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

这该怎么做?感谢帮助。

awk
5个回答
133
投票

这可能是你正在寻找的:

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

也就是说,使用'\''你关闭开放的',然后通过逃避打印文字',最后再次打开'


68
投票

使用\x27表示单引号

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

Source


31
投票

另一种选择是将单引号作为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'

12
投票
awk 'BEGIN {FS=" "} {printf "\047%s\047 ", $1}'

1
投票

对于小脚本,使其可读的可选方法是使用如下变量:

awk -v fmt="'%s'\n" '{printf fmt, $1}'

我发现在我不得不在输出中产生多次单引号字符并且\ 047使它完全不可读的情况下很方便

© www.soinside.com 2019 - 2024. All rights reserved.