Hier ist eine Beispieldatei:
somestuff...
all: thing otherthing
some other stuff
Was ich tun möchte, ist, der Zeile, die all:
wie folgt beginnt, Folgendes hinzuzufügen :
somestuff...
all: thing otherthing anotherthing
some other stuff
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
Dies sollte für Sie funktionieren
Mit dem Befehl s (Ersatz) können Sie nach einer Zeile suchen, die einem regulären Ausdruck entspricht.
&
Steht im obigen Befehl für die übereinstimmende Zeichenfolge.quelle
Sie können den Text
$0
in awk anhängen, wenn er der Bedingung entspricht:Erläuterung
/patt/ {...}
Wenn die Linie mit dem von angegebenen Muster übereinstimmtpatt
, führen Sie die darin beschriebenen Aktionen aus{}
./^all:/ {$0=$0" anotherthing"}
Wenn die Zeile mit beginnt (dargestellt durch^
)all:
, fügen Sie sieanotherthing
an die Zeile an.1
Löst als echte Bedingung die Standardaktion ausawk
: Drucken Sie die aktuelle Zeile (print $0
). Dies geschieht immer, sodass entweder die ursprüngliche oder die geänderte Zeile gedruckt wird.Prüfung
Für Ihre angegebene Eingabe wird Folgendes zurückgegeben:
Beachten Sie, dass Sie auch den Text zum Anhängen an eine Variable bereitstellen können:
quelle
awk: can't set $0
/usr/xpg4/bin/awk
was das "gute" awk ist.In Bash:
quelle
Hier ist eine weitere einfache Lösung mit sed.
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
quelle
Lösung mit awk:
Einfach: Wenn die Zeile mit dem
all
Drucken der Zeile plus "etwas anderes" beginnt, drucken Sie nur die Zeile.quelle
awk '$1=="all:" {$(NF+1)="anotherthing"} 1'
condition {actions}
Paaren. Wenn dascondition
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 ist1
), besteht die Standardaktion darin, den aktuellen Datensatz zu drucken.