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 ça:
somestuff...
all: thing otherthing anotherthing
some other stuff
Ça marche pour moi
sed '/^all:/ s/$/ anotherthing/' file
La première partie est un motif à rechercher et la deuxième partie est la substitution d'un sed ordinaire par $
pour la fin d'une ligne.
Si vous souhaitez modifier le fichier au cours du processus, utilisez -i
option
sed -i '/^all:/ s/$/ anotherthing/' file
Ou vous pouvez le rediriger vers un autre fichier
sed '/^all:/ s/$/ anotherthing/' file > output
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.
Vous pouvez ajouter le texte à $0
in awk si elle correspond à la condition:
awk '/^all:/ {$0=$0" anotherthing"} 1' file
/patt/ {...}
si la ligne correspond au modèle donné par patt
, effectuez les actions décrites dans {}
./^all:/ {$0=$0" anotherthing"}
si la ligne commence (représentée par ^
) avec all:
, puis ajoutez anotherthing
à la ligne.1
comme condition vraie, déclenche l'action par défaut de awk
: affiche la ligne en cours (print $0
). Cela se produira toujours, de sorte que la ligne d'origine ou la ligne modifiée sera imprimée.Pour votre entrée donnée, il retourne:
somestuff...
all: thing otherthing anotherthing
some other stuff
Notez que vous pouvez également fournir le texte à ajouter dans une variable:
$ awk -v mytext=" EXTRA TEXT" '/^all:/ {$0=$0mytext} 1' file
somestuff...
all: thing otherthing EXTRA TEXT
some other stuff
En bash:
while read -r line ; do
[[ $line == all:* ]] && line+=" anotherthing"
echo "$line"
done < filename
Voici une autre solution simple utilisant sed.
$ sed -i 's/all.*/& anotherthing/g' filename.txt
Explication:
all. * signifie toutes les lignes commençant par 'all'.
& représente le match (c'est-à-dire la ligne complète qui commence par 'tous')
puis sed remplace l'ancien par le dernier et ajoute le mot "Anotherthing"
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 "anotherthing", sinon imprimez seulement la ligne.