Я хочу сделать следующее
awk 'BEGIN {FS=" ";} {printf "'%s' ", $1}'
Но экранирование одинарных кавычек таким способом не работает
awk 'BEGIN {FS=" ";} {printf "\'%s\' ", $1}'
Как это сделать? Спасибо за помощь.
Возможно, это то, что вы ищете:
awk 'BEGIN {FS=" ";} {printf "'\''%s'\'' ", $1}'
То есть, с помощью '\'' вы закрываете отверстие ', затем печатаете литерал ', экранируя его и, наконец, открываете' снова.
'\''
'
Одиночная кавычка представлена с использованием \x27
\x27
Как и в
awk 'BEGIN {FS=" ";} {printf "\x27%s\x27 ", $1}'
Источник
Другой вариант - передать одинарную кавычку как переменную 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'
awk 'BEGIN {FS=" "} {printf "\047%s\047 ", $1}'
Для небольших сценариев необязательный способ сделать его читабельным - использовать переменную, подобную этой:
awk -v fmt="'%s'\n" '{printf fmt, $1}'
Я нашел это условным в случае, когда мне приходилось многократно вводить символ одинарных кавычек в выводе, а \ 047 делали его полностью нечитаемым