Antworten:
Das funktioniert bei mir
sed '/^all:/ s/$/ anotherthing/' file
Der erste Teil ist ein zu findendes Muster und der zweite Teil ist eine gewöhnliche Sed-Substitution, die $
das Ende einer Zeile verwendet.
Wenn Sie die Datei während des Vorgangs ändern möchten, verwenden Sie die -i
Option
sed -i '/^all:/ s/$/ anotherthing/' file
Oder Sie können es in eine andere Datei umleiten
sed '/^all:/ s/$/ anotherthing/' file > output
Sie können den Text $0
in awk anhängen, wenn er der Bedingung entspricht:
awk '/^all:/ {$0=$0" anotherthing"} 1' file
/patt/ {...}
Wenn die Linie mit dem von angegebenen Muster übereinstimmt patt
, führen Sie die darin beschriebenen Aktionen aus {}
./^all:/ {$0=$0" anotherthing"}
Wenn die Zeile mit beginnt (dargestellt durch ^
) all:
, fügen Sie sie anotherthing
an die Zeile an.1
Löst als echte Bedingung die Standardaktion aus awk
: Drucken Sie die aktuelle Zeile ( print $0
). Dies geschieht immer, sodass entweder die ursprüngliche oder die geänderte Zeile gedruckt wird.Für Ihre angegebene Eingabe wird Folgendes zurückgegeben:
somestuff...
all: thing otherthing anotherthing
some other stuff
Beachten Sie, dass Sie auch den Text zum Anhängen an eine Variable bereitstellen können:
$ 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
was das "gute" awk ist.
In Bash:
while read -r line ; do
[[ $line == all:* ]] && line+=" anotherthing"
echo "$line"
done < filename
Hier ist eine weitere einfache Lösung mit sed.
$ sed -i 's/all.*/& anotherthing/g' filename.txt
Erläuterung:
all. * bedeutet, dass alle Zeilen mit 'all' beginnen.
& stellen die Übereinstimmung dar (dh die vollständige Zeile, die mit 'all' beginnt)
Ersetzen Sie dann das erstere durch das spätere und fügen Sie das Wort "anderweitig" hinzu
Lösung mit awk:
awk '{if ($1 ~ /^all/) print $0, "anotherthing"; else print $0}' file
Einfach: Wenn die Zeile mit dem all
Drucken der Zeile plus "etwas anderes" beginnt, drucken Sie nur die Zeile.
awk '$1=="all:" {$(NF+1)="anotherthing"} 1'
condition {actions}
Paaren. Wenn das condition
weggelassen wird, werden die Aktionen für jeden Datensatz ausgeführt. Wenn die {actions}
weggelassen werden und die Bedingung als wahr ausgewertet wird (was für die Nummer der Fall ist 1
), besteht die Standardaktion darin, den aktuellen Datensatz zu drucken.