GNU/Linux >> Belajar Linux >  >> Linux

Gunakan Sed Untuk Menambahkan Karakter Di Posisi Ke-N Dari String Yang Cocok?

Saya perlu menambahkan karakter di posisi ke-n (dalam hal ini ke-2) dari string yang cocok.
Misalnya, dalam file text.txt Saya ingin menambahkan N sebelum string dan setelah " hanya dalam string yang mengandung blah

text.txt:

"1blah8","na","8blah4"  
"2blah5","na","10blah4"  
"5blah5","na","1blah234"  

Saya ingin mendapatkan text2.txt:

"Ν1blah8","na","Ν8blah4"  
"Ν2blah5","na","Ν10blah4"  
"Ν5blah5","na","Ν1blah234"  

Saya telah mencoba sed 's/.*blah.*/N&/' text.txt > text2.txt
tapi saya mendapatkan N sebelum " dan hanya di string pertama yang ditemukan di setiap baris.

Jawaban yang Diterima:

Pendekatan lain:

$ sed 's/"([^"]*blah[^"]*")/"N1/g' test.txt 
"N1blah8","na","N8blah4"  
"N2blah5","na","N10blah4"  
"N5blah5","na","1blah234

Regex sedang mencari " , lalu 0 atau lebih non-" karakter diikuti oleh blah , lalu 0 atau lebih non-" lagi. Karena tanda kurung, ini diambil dan nantinya bisa disebut sebagai 1 . Oleh karena itu, perintah akan mengganti pola yang cocok dengan dirinya sendiri (1 ) tetapi dengan "N ditambahkan. Itu sebabnya " yang pertama berada di luar tanda kurung. /g pengubah di akhir membuatnya menggantikan semua string yang cocok di setiap baris.

Jika Anda sed versi mendukungnya, Anda dapat menyederhanakannya menjadi:

sed -E 's/"([^"]*blah[^"]*")/"N1/g'

Linux
  1. Bagaimana Cara Mengganti String Dalam File?

  2. Bagaimana Cara Menggunakan Sed Untuk Mengganti String Multi-baris?

  3. Bungkus Karakter Pertama Dari Sebuah String Menggunakan Sed?

  1. Penggantian String Menggunakan Kamus?

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

  3. Bash:tambahkan string ke akhir file tanpa jeda baris

  1. Cara menggunakan perintah WC untuk mencetak karakter, byte, baris baru, dan jumlah kata di Linux

  2. Menggunakan Referensi Ke Variabel Bash String Di Sed?

  3. Bagaimana saya bisa menambahkan string ke awal setiap file dalam folder di bash?