Как избежать одиночной кавычки внутри awk - PullRequest
86 голосов
/ 28 марта 2012

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

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

Но экранирование одинарных кавычек таким способом не работает

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

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

Ответы [ 5 ]

133 голосов
/ 28 марта 2012

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

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

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

68 голосов
/ 11 октября 2012

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

Как и в

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

Источник

31 голосов
/ 16 апреля 2014

Другой вариант - передать одинарную кавычку как переменную 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 голосов
/ 18 декабря 2013
awk 'BEGIN {FS=" "} {printf "\047%s\047 ", $1}'
1 голос
/ 10 апреля 2019

Для небольших сценариев необязательный способ сделать его читабельным - использовать переменную, подобную этой:

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

Я нашел это условным в случае, когда мне приходилось многократно вводить символ одинарных кавычек в выводе, а \ 047 делали его полностью нечитаемым

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...