web-dev-qa-db-fra.com

Comment échapper à une seule citation dans awk

Je veux faire ce qui suit

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

Mais échapper à la citation simple de cette façon ne fonctionne pas

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

Comment faire ça? Merci pour l'aide.

81
user1096734

C'est peut-être ce que vous cherchez:

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

C'est-à-dire qu'avec '\'' vous fermez le ' d'ouverture, puis imprimez un ' littéral en l'échappant et ouvrez à nouveau le ' à nouveau.

122
Steve

Un seul devis est représenté avec \x27

Comme dans 

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

La source

62
tiagojco

Une autre option consiste à transmettre la citation simple en tant que variable awk :

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

Exemple plus simple:

 # Prints 'test me', _including_ the single quotes.
awk -v q=\' '{print q $0 q }' <<<'test me'
24
mklement0
awk 'BEGIN {FS=" "} {printf "\047%s\047 ", $1}'
8
Sergio K

Pour les petits scripts, un moyen optionnel de le rendre lisible consiste à utiliser une variable comme celle-ci:

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

Je trouvais ça conveninet dans un cas où je devais produire plusieurs fois le caractère guillemet simple dans la sortie et que le\047 le rendait totalement illisible

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

C'est: '"'"' entre guillemets.

0
James Brown