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.

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

-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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.