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.

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

-3

misalkan Anda ingin mengganti baris ketiga di file_record:

sed -i "s/`head -3 file_record | tail -1 `/replaced/" file_record

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.