Mengganti string berdasarkan nomor baris

50

Saya memiliki situasi di mana saya ingin mengganti string tertentu di banyak file

Ganti string AAA dengan BBB string lain tetapi ada banyak string yang dimulai dengan AAA atau berakhir pada AAA, dan saya ingin mengganti hanya satu pada baris 34 dan menjaga yang lain tetap utuh.

Apakah mungkin untuk menentukan berdasarkan nomor baris, pada semua file string ini persis pada baris ke-34.

kripto
sumber

Jawaban:

82

Anda dapat menentukan nomor baris dalam sed atau NR (jumlah catatan) dalam awk.

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

atau gunakan FNR (catatan nomor file) jika Anda ingin menentukan lebih dari satu file pada baris perintah.

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

atau

sed '34s/AAA/BBB/'

untuk melakukan penggantian di tempat dengan sed

sed -i '34s/AAA/BBB/' file_name
Vanaga
sumber
-3

misalkan Anda ingin mengganti baris ketiga di file_record:

sed -i "s/`head -3 file_record | tail -1 `/replaced/" file_record
RAMAN
sumber
gunakan kembali kutipan sebelum kepala dan setelah -1 ... ini dia tidak menerimanya
RAMAN
1
Ini tidak akan berhasil. Perlu beberapa tugas berat untuk melarikan diri. Dan bagaimana jika baris ketiga diduplikasi di tempat lain?
Sparhawk