Mit dem Befehl sed ändern Sie eine Zeichenfolge in einer bestimmten Zeile durch eine bestimmte Zeichenfolge

Mit dem Befehl sed ändern Sie eine Zeichenfolge in einer bestimmten Zeile durch eine bestimmte Zeichenfolge

Ich muss sed verwenden, um einen String in einer Datei nur in der 4. Zeile zu ändern, wenn dieser einen String mit dem Namen „test“ enthält.

Was ich jetzt im Wesentlichen habe, ist:

sed '/test/ s/abc/zz/g' sample

Dadurch werden grundsätzlich die Zeilen durchsucht und geprüft, ob ein Test vorhanden ist. Anschließend wird abc in zz geändert, wenn es in dieser Zeile steht.

Aber wie mache ich das nur für die 4. Zeile.

Ich habe es versucht

 sed '/test/ 4s/abc/zz/g' sample

Ich füge eine 4 vor dem „s“ hinzu, aber das funktioniert nicht.

Antwort1

Ein Weg:

sed -e '4 {
  /test/s/abc/zz/g
}' <file

Antwort2

Ich bin nicht sicher, aber würde so etwas funktionieren?

awk 'NR==4 {print $0}' filename.txt | grep 'test' | sed 's/abc/xyz/g'

Antwort3

ein anderer Weg:

Suchen Sie zuerst die Zeile mit der Zeichenfolge „test“:

LINE=$(grep "test" file -n | awk '{print $1}' | cut -d ':' -f1 | xargs)

Führen Sie dann mithilfe der Variablen LINE Folgendes aus:

sed "s$LINEs/abc/zzz/g" Datei

Antwort4

Sie können dies verwenden

sed -i '4s/old_text/new_text/g' file_name

verwandte Informationen