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'