84 votes

Ajouter à la fin d'une ligne contenant un motif - avec sed ou awk

Voici un exemple de fichier

 somestuff...
all: thing otherthing
some other stuff
 

Ce que je veux faire, c'est ajouter à la ligne qui commence par all: comme ceci:

 somestuff...
all: thing otherthing anotherthing
some other stuff
 

Je peux probablement faire cela en utilisant sed, mais je ne suis pas très bon en sed, alors est-ce que quelqu'un pourrait m'aider?

163voto

Tomas Points 4691

Ça marche pour moi

 sed '/^all:/ s/$/ anotherthing/' file
 

La première partie est un motif à rechercher et la seconde partie est la substitution d'un sed ordinaire en utilisant $ fin de ligne.

Si vous souhaitez modifier le fichier au cours du processus, utilisez l’option -i

 sed -i '/^all:/ s/$/ anotherthing/' file
 

Ou vous pouvez le rediriger vers un autre fichier

 sed '/^all:/ s/$/ anotherthing/' file > output
 

9voto

izidor Points 934

Cela devrait fonctionner pour vous

 sed -e 's_^all: .*_& anotherthing_'
 

En utilisant la commande s (substitute), vous pouvez rechercher une ligne qui satisfait une expression régulière. Dans la commande ci-dessus, & représente la chaîne correspondante.

6voto

glenn jackman Points 69748

En bash:

 while read -r line ; do
    [[ $line == all:* ]] && line+=" anotherthing"
    echo "$line"
done < filename
 

3voto

Saphrosit Points 7134

Solution avec awk:

 awk '{if ($1 ~ /^all/) print $0, "anotherthing"; else print $0}' file
 

Simplement: si la ligne commence par all imprimez la ligne plus "autre chose", sinon imprimez seulement la ligne.

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