Voici un fichier d'exemple:
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
Réponses:
Cela fonctionne pour moi
sed '/^all:/ s/$/ anotherthing/' file
La première partie est un motif à trouver et la deuxième partie est une substitution de sed ordinaire utilisant $
pour la fin d'une ligne.
Si vous souhaitez modifier le fichier pendant le processus, utilisez l' -i
option
sed -i '/^all:/ s/$/ anotherthing/' file
Ou vous pouvez le rediriger vers un autre fichier
sed '/^all:/ s/$/ anotherthing/' file > output
Vous pouvez ajouter le texte $0
dans awk s'il correspond à la condition:
awk '/^all:/ {$0=$0" anotherthing"} 1' file
/patt/ {...}
si la ligne correspond au modèle donné par patt
, alors effectuez les actions décrites dans {}
./^all:/ {$0=$0" anotherthing"}
si la ligne commence (représentée par ^
) par all:
, alors ajoutez anotherthing
à la ligne.1
comme condition vraie, déclenche l'action par défaut de awk
: imprimer la ligne courante ( print $0
). Cela se produira toujours, donc il imprimera soit la ligne d'origine, soit la ligne modifiée.Pour votre entrée donnée, il renvoie:
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
awk: can't set $0
/usr/xpg4/bin/awk
quel est le "bon" awk.
Dans 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 que toutes les lignes commencent par «tous».
& représente la correspondance (c'est-à-dire la ligne complète commençant par «tous»)
puis sed remplace le premier par le plus tard et ajoute le mot `` autre chose ''
Solution avec awk:
awk '{if ($1 ~ /^all/) print $0, "anotherthing"; else print $0}' file
Simplement: si la ligne commence par all
imprimer la ligne plus "autre chose", sinon n'imprimez que la ligne.
awk '$1=="all:" {$(NF+1)="anotherthing"} 1'
condition {actions}
paires. Si le condition
est omis, les actions sont exécutées pour chaque enregistrement. Si les {actions}
sont omis et que la condition est évaluée à vrai (ce qui est le cas pour le nombre 1
), l'action par défaut consiste à imprimer l'enregistrement actuel.