311 votes

Insérer une ligne après le premier match avec sed

Pour une raison quelconque, je n'arrive pas à trouver une réponse simple à cette question et je suis un peu pressé en ce moment. Comment puis-je insérer une ligne de texte de choix après la première ligne correspondant à une chaîne spécifique à l'aide de la commande sed . J'ai ...

 CLIENTSCRIPT="foo"
CLIENTFILE="bar"
 

Et je veux insérer une ligne après la ligne CLIENTSCRIPT= entraînant ...

 CLIENTSCRIPT="foo"
CLIENTSCRIPT2="hello"
CLIENTFILE="bar"
 

455voto

sputnick Points 31663

Essayez de faire ceci:

 sed '/CLIENTSCRIPT="foo"/a CLIENTSCRIPT2="hello"' file
 

si vous voulez remplacer sur place , utilisez

 sed -i '/CLIENTSCRIPT="foo"/a CLIENTSCRIPT2="hello"' file
 

Sortie

 CLIENTSCRIPT="foo"
CLIENTSCRIPT2="hello"
CLIENTFILE="bar"
 

Doc

  • voir sed doc et chercher \a (annexe)

65voto

Stephane Chazelas Points 1418

Note de la norme sed de la syntaxe (comme dans POSIX, donc pris en charge par tous conformes sed applications (GNU, OS/X, BSD, Solaris...)):

sed '/CLIENTSCRIPT=/a\
CLIENTSCRIPT2="hello"' file

L' -i option pour l'édition est aussi une extension GNU, d'autres implémentations (FreeBSD) appuyer -i '' .

Sinon, pour la portabilité, vous pouvez utiliser perl à la place:

perl -pi -e '$_ .= "CLIENTSCRIPT2=\"hello\"" if /CLIENTSCRIPT=/' file

Ou vous pouvez utiliser ed ou ex:

printf '%s\n' /CLIENTSCRIPT=/a 'CLIENTSCRIPT2="hello"' . w q | ex -s file

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