Ersetzen der Zeichenfolge anhand der Zeilennummer

50

Ich habe eine Situation, in der ich eine bestimmte Zeichenfolge in vielen Dateien ersetzen möchte

Ersetzen Sie eine Zeichenfolge AAA durch eine andere Zeichenfolge BBB, aber es gibt viele Zeichenfolgen, die mit AAA beginnen oder mit AAA enden, und ich möchte nur eine in Zeile 34 ersetzen und andere intakt halten.

Ist es möglich, die Zeilennummer anzugeben, befindet sich diese Zeichenfolge in allen Dateien genau in der 34. Zeile.

Krypto
quelle

Antworten:

82

Sie können die Zeilennummer in sed oder NR (Nummer des Datensatzes) in awk angeben.

awk 'NR==34 { sub("AAA", "BBB") }'

oder verwenden Sie FNR (File Number Record), wenn Sie mehr als eine Datei in der Befehlszeile angeben möchten.

awk 'FNR==34 { sub("AAA", "BBB") }'

oder

sed '34s/AAA/BBB/'

In-Place-Austausch mit sed

sed -i '34s/AAA/BBB/' file_name
VanagaS
quelle
-3

Nehmen wir an, Sie möchten die dritte Zeile im file_record ersetzen:

sed -i "s/`head -3 file_record | tail -1 `/replaced/" file_record
RAMAN
quelle
Verwenden Sie das
Rückzitat
1
Das wird einfach nicht funktionieren. Es braucht eine schwere Flucht. Und was ist, wenn die dritte Zeile woanders dupliziert wird?
Sparhawk