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'