web-dev-qa-db-fra.com

Comment insérer du texte après une certaine chaîne dans un fichier?

En ce moment j'utilise echo "Hello World" >> file.txt pour ajouter du texte à un fichier mais j'ai aussi besoin d'ajouter du texte en dessous d'une certaine chaîne disons "[option]", est-ce possible avec sed?

PAR EXEMPLE:

Fichier d'entrée

Some text
Random
[option]
Some stuff

Fichier de sortie

Some text
Random
[option]
*inserted text*
Some stuff
78
Javier Villanueva

Ajout d'une ligne après la correspondance

  • sed '/\[option\]/a Hello World' input

Insérer une ligne avant le match

  • sed '/\[option\]/i Hello World' input

De plus, vous pouvez effectuer la sauvegarde et modifier le fichier d'entrée sur place à l'aide de -i.bkp option pour sed

113
Rahul Patil

Oui, c'est possible avec sed:

sed '/pattern/a some text here' filename

Un exemple:

$ cat test
foo
bar
option
baz
$ sed '/option/a insert text here' test
foo
bar
option
insert text here
baz
$
36
devnull

Avec awk:

awk '1;/PATTERN/{ print "add one line"; print "\\and one more"}' infile

Gardez à l'esprit que certains caractères ne peuvent pas être inclus littéralement, il faut donc utiliser séquences d'échappement (ils commencent par une barre oblique inverse), par exemple pour imprimer une barre oblique inverse, il faut écrire \\.

C'est en fait la même chose avec sed mais en plus chaque nouvelle ligne incorporée dans le texte doit être précédée d'une barre oblique inverse:

sed '/PATTERN/a\
add one line\
\\and one more' infile

Pour plus de détails sur les séquences d'échappement, consultez le manuel.

6
don_crissti