Как избежать одиночной цитаты внутри awk

Я хочу сделать следующее

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

Но экранирование одиночной кавычки таким образом не работает

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

Как это сделать? Спасибо за помощь.

Ответ 1

Возможно, это то, что вы ищете:

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

То есть, с '\'' вы закрываете открытие ', а затем печатаете литерал ', экранируя его и, наконец, снова открывайте '.

Ответ 2

Одиночная кавычка представлена ​​с помощью \x27

Как в

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

Источник

Ответ 3

Другой вариант - передать одиночную кавычку как переменную 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'

Ответ 4

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

Ответ 5

$ cat > test.in
foo
bar
$ awk 'BEGIN {FS=" ";} {printf "'"'"'%s'"'"' ", $1}' test.in
'foo' 'bar'

Это: '"'"' в двойных кавычках.