GNU/Linux >> Belajar Linux >  >> Linux

Ganti Rentang Garis Dengan Rentang Garis (sed Atau Lainnya)?

Saya memiliki dua file teks:file1 dan file2 , keduanya dengan beberapa baris.

$ cat file1
line one
line two
line three
line four
line five

$ cat file2
line A
line B
line C
line D
line E
line F

Saya ingin mengganti rentang dari baris file1 (dari baris 1_start ke baris 1_end ) dengan rentang dari baris file2 (dari baris 2_start ke baris 2_end ).

Misalnya, gantikan baris 2,4 di file1 dengan garis 3,5 dari file2 .

Yang hanya bisa saya lakukan sampai sekarang adalah mengekstrak baris yang diperlukan dari file2 dengan

$ sed -n 3,5p file2

Tapi itu tidak membantu memasukkannya ke file1 . Apakah mungkin dengan sed ? Jika tidak, apakah mungkin dengan alat serupa?

Jawaban yang Diterima:

sed dapat mencetak rentang garis tertentu dengan sesuatu seperti ini:

sed -n 'X,Yp' filename

Dimana X adalah baris pertama dalam rentang dan Y adalah baris terakhir, keduanya inklusif. -n memberitahu sed untuk tidak mencetak apa pun kecuali secara eksplisit diperintahkan untuk melakukannya dan itulah yang p mengikuti kisarannya.

Jadi Anda dapat dengan mudah memanggil ini tiga kali, menambahkan ke file sementara, lalu memindahkan file itu ke mana pun Anda inginkan. Anda juga dapat menggabungkan semuanya menggunakan cat dan proses substitusi seperti yang ditunjukkan oleh contoh ini (saya menggunakan nomor baris yang baru saja saya keluarkan; $ adalah baris terakhir dalam file):

cat <(sed -n '1,5p' file1) <(sed -n '10,12p' file2) <(sed -n '9,$p' file1) > file1.tmp && mv file1.tmp file1

Di sini, kita akan mengganti baris 6, 7 dan 8 di file1 dengan baris 10, 11 dan 12 dari file2 .

Pembaruan: Terima kasih kepada @MiniMax karena telah menunjukkan bahwa cat dan proses substitusi dapat dihindari dengan melakukan hal berikut:

{ sed -n '1,5p' file1; sed -n '10,12p' file2; sed -n '9,$p' file1; } > file1.tmp && mv file1.tmp file1

Ciuman, setelah semua.


Linux
  1. Memanipulasi teks pada baris perintah dengan sed

  2. Bisakah Sed Mengganti Karakter Baris Baru?

  3. Sisipkan Baris Baru Dengan Nilai yang Hilang (na)?

  1. Ganti kata dengan yang lain di bash

  2. sed menyisipkan baris dengan spasi ke baris tertentu

  3. Temukan dan ganti teks dalam file di antara rentang baris menggunakan sed

  1. Ganti Baris Dengan Konten Lain Menggunakan Sed Dan Paralel Untuk File Besar?

  2. Ganti Garis yang Mencocokkan Pola Dengan Garis Dari File Lain Secara Berurutan?

  3. Multi-Line Sed Ganti