GNU/Linux >> Belajar Linux >  >> Linux

sed - menyisipkan baris setelah baris X setelah pertandingan

sed '/function_1(/,/^[[:space:]]*}/ {
 ,/^[[:space:]]*}/ a\
Line that\
you want to\
insert (append) here
   }' YourFile
  • sisipkan baris setelah } (sendirian di baris dengan akhirnya beberapa spasi sebelumnya) dari bagian yang dimulai dengan function_1(
  • Saya menganggap tidak ada } sendirian di kode internal Anda seperti di sampel Anda

hati-hati dalam pemilihan berdasarkan nama fungsi karena dapat digunakan (dan biasanya memang demikian) sebagai panggilan ke fungsi itu sendiri di bagian kode lain jadi mungkin /^void function_1()$/ lebih baik


Jangan hitung, cocokkan:

sed -e '/^void function_1()/,/^}$/ { /^}$/a\
TEXT TO INSERT
}' input

Ini melihat blok antara deklarasi dan kurung kurawal penutup, lalu menambahkan TEXT_TO_INSERT setelah kurung kurawal penutup.


Gunakan awk:

awk '1;/function_1/{c=4}c&&!--c{print "new text"}' file
  • 1 adalah singkatan dari {print} , jadi semua baris dalam file dicetak
  • ketika pola cocok, atur c ke 4
  • ketika c mencapai 1 (jadi c benar dan !--c benar), sisipkan baris

Anda bisa menggunakan !--c tetapi menambahkan centang untuk c menjadi benar juga berarti bahwa c tidak terus menurun melebihi 0.


Coba ini dengan GNU sed:

sed "/function_1/{N;N;N;a new_text
}" filename

Linux
  1. Bagaimana Cara Menyisipkan Teks Sebelum Baris Pertama Sebuah File?

  2. Cetak Baris Sebelumnya Setelah Pencocokan Pola Menggunakan Sed?

  3. Mengganti Pola Setelah Kecocokan Ke-N Ditemukan Di Setiap Baris??

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

  2. Sed Pada Osx Masukkan Pada Garis Tertentu?

  3. Tampilkan Semua Baris Sebelum Pertandingan?

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

  2. Sed:Sisipkan Teks Setelah Karakter Ke-N Mendahului/mengikuti String yang Diberikan?

  3. Menghapus Baris Tertentu dari File di Baris Perintah Linux