quel est le sens de cette commande sed: `; / @ / {h; s / test / next / g; x; G}`?

9
sed -e 's/72;/72, next_val = 0x11111111;/;/@/{h;s/test/next/g;x;G}'
fmt_vuln.c > fmt_vuln2.c

pourriez-vous me dire quel est le sens de ;/@/{h;s/test/next/g;x;G}?

Thomas Kwon
la source

Réponses:

6
;/@/{h;s/test/next/g;x;G}? 

/@/  search for an `@` sign
{}   for the lines where that is true do this 'block' of code
h    put the pattern match in the hold space
s/   substitute test for next everywhere in the space
g    do the previous substitution for all matches on the line
x    swap the hold with the pattern space
G    Add a new line with the contents of the hold space.
Michael Durrant
la source
totalement résolu mon problème grâce à votre réponse. merci ^^
Thomas Kwon
6
/@/ # For pattern-space containing the character @ do the following
{
  h              # place a copy of the pattern-space into the hold-space
  s/test/next/g  # replace all instances of "test" with "next" in the pattern-space
  x              # swap the pattern-space with the hold-space
  G              # append a newline followed by contents of hold-space to the pattern-space
}

Ainsi, pour chaque ligne contenant un @, la version modifiée de l'espace de motif sera imprimée suivie de l'original (l'espace de maintien contient la version non modifiée).

voir le résumé des commandes pour Sed

Peter.O
la source
Merci beaucoup :) votre réponse m'est vraiment utile. ^^
Thomas Kwon