149 votes

Comment échapper à un guillemet simple dans awk

Je veux faire ce qui suit

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

Mais l'échappement des guillemets simples de cette façon ne fonctionne pas.

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

Comment faire ? Merci de votre aide.

217voto

Steve Points 18420

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

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

C'est-à-dire qu'avec '\'' vous fermez l'ouverture ' puis imprimer un littéral ' en l'échappant et enfin ouvrir le ' encore.

103voto

tiagojco Points 181

Une citation simple est représentée par \x27

Comme dans

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

Source :

45voto

mklement0 Points 12597

Une autre option consiste à passer le guillemet simple comme une variable awk :

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

Un exemple plus simple avec la concaténation de chaînes de caractères :

# Prints 'test me', *including* the single quotes.
$ awk -v q=\' '{print q $0 q }' <<<'test me'
'test me'

20voto

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

7voto

user1708042 Points 196

Pour les petits scripts, une façon optionnelle de les rendre lisibles est d'utiliser une variable comme celle-ci :

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

Je l'ai trouvé pratique dans un cas où j'ai dû produire plusieurs fois le caractère guillemet simple dans la sortie et le \047 le rendait totalement illisible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X