Contoh:
1:20 2:25 3:0.432 2:-17 10:12
Saya ingin mengganti semua string yang dimulai dengan 2: ke 2:0 .
Keluaran:
1:20 2:0 3:0.432 2:0 10:12
Jawaban yang Diterima:
Menggunakan sed :
sed -E 's/((^| )2:)[^ ]*/\10/g' in > out
Juga, seperti yang terinspirasi oleh jawaban souravc, jika ada tidak peluang 2: substring setelah awal string bukan berisi 2: . terkemuka substring (mis. ada tidak peluang 1:202:25 string, yang akan diganti oleh perintah singkat berikut menjadi 1:202:0 ), perintahnya mungkin disingkat menjadi ini:
sed -E 's/2:[^ ]*/2:0/g' in > out
Perincian Perintah #1 / #2 :
-E:membuatsedmenafsirkan pola sebagai pola ERE (Extended Regular Expression);> out:mengalihkanstdoutuntukout;
sed perincian perintah #1 :
s:menegaskan untuk melakukan substitusi/:memulai pola(:memulai grup penangkap(:mulai mengelompokkan string yang diizinkan^:cocok dengan awal baris|:memisahkan string kedua yang diizinkan:cocok dengankarakter):berhenti mengelompokkan string yang diizinkan2:cocok dengan2karakter::cocok dengan:karakter):menghentikan grup penangkap[^ ]*:cocok dengan sejumlah karakter yang bukan/:menghentikan pola / memulai string pengganti\1:backreference diganti dengan grup penangkap pertama:menambahkankarakter/:menghentikan string pengganti / memulai flag polag:menegaskan untuk melakukan substitusi secara global, yaitu mengganti setiap kemunculan pola pada baris
sed perincian perintah #2 :
s:menegaskan untuk melakukan substitusi/:memulai pola2:cocok dengan2karakter::cocok dengan:karakter[^ ]*:cocok dengan sejumlah karakter yang bukan/:menghentikan pola / memulai string pengganti2:0:menambahkan2:0string/:menghentikan string pengganti / memulai flag polag:menegaskan untuk melakukan substitusi secara global, yaitu mengganti setiap kemunculan pola pada baris