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