GNU/Linux >> Belajar Linux >  >> Linux

Menggabungkan 3 Baris Berturut-turut Dengan Swap?

Hai, saya perlu menggabungkan tiga baris berturut-turut dengan swap antara baris ke-2 dan ke-3 di 'file':

$cat file
Object Name: A
    comments: comment A
    manual_encdomain: Name: A 
Object Name: B
    comments: comment B
    manual_encdomain: Name: B 

Jadi alih-alih output di bawah ini :

$sed 'N;N;s/n/ /g' file 
Object Name: A comments: comment A manual_encdomain: Name: A 
Object Name: B comments: comment B manual_encdomain: Name: B

Saya lebih suka ini

Object Name: A manual_encdomain: Name: A comments: comment A
Object Name: B manual_encdomain: Name: B comments: comment B

sed, awk apa saja

Jawaban yang Diterima:

Ya, Anda dapat menggunakan sed untuk menukar baris:

$ sed -E 'N;N;s/n([^n]*)n([^n]*)/ 2 1/' file
Object Name: A     manual_encdomain: Name: A      comments: comment A
Object Name: B     manual_encdomain: Name: B      comments: comment B

Atau, secara setara:

$ sed  'N;N;s/n([^n]*)n([^n]*)/ 2 1/g' file
Object Name: A     manual_encdomain: Name: A      comments: comment A
Object Name: B     manual_encdomain: Name: B      comments: comment B

Cara kerjanya:

  • -E

    Ini mengaktifkan ekspresi reguler yang diperluas. (-E bekerja pada sed BSD (OSX) dan sed GNU modern. Untuk versi GNU sed yang lebih lama, gunakan -r sebagai gantinya.)

    Tanpa regex yang diperluas, kita harus keluar dari ( dan ) seperti yang ditunjukkan di atas.

  • N;N

    Ini dibaca di baris kedua dan ketiga.

  • s/n([^n]*)n([^n]*)/ 2 1/

    Ini menukar baris kedua dan ketiga. Kemunculan pertama n([^n]*) menangkap baris kedua dan menyimpannya di grup tangkap 1. Kemunculan kedua n([^n]*) menangkap baris ketiga dan menyimpannya di grup tangkap 2. Teks pengganti, 2 1 menukar posisi sambil mengganti baris baru dengan spasi.

Menghapus beberapa ruang putih berlebih

Baris kedua dan ketiga diindentasi dalam file input. Jika kita ingin menghapus spasi ekstra itu:

$ sed -E 'N;N;s/n[[:blank:]]*([^n]*)n[[:blank:]]*([^n]*)/ 2 1/g' file
Object Name: A manual_encdomain: Name: A  comments: comment A
Object Name: B manual_encdomain: Name: B  comments: comment B

[[:blank:]] adalah cara aman-unicode untuk mencocokkan kosong dan tab.


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

  2. Menggunakan Bungkus Kata Dengan Mc?

  3. Instal phpList dengan Softaculous

  1. Menggabungkan Folder Dengan Mv?

  2. Cara menghapus folder dengan nama tertentu

  3. Cara mengurangi baris (baris) dengan AWK

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

  2. Masalah Dengan Swap Di Ubuntu 18.04?

  3. Temukan semua file dengan nama yang mengandung string