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
:membuatsed
menafsirkan pola sebagai pola ERE (Extended Regular Expression);> out
:mengalihkanstdout
untukout
;
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 dengan
karakter
)
:berhenti mengelompokkan string yang diizinkan2
:cocok dengan2
karakter:
:cocok dengan:
karakter)
:menghentikan grup penangkap[^ ]*
:cocok dengan sejumlah karakter yang bukan/
:menghentikan pola / memulai string pengganti\1
:backreference diganti dengan grup penangkap pertama:menambahkan
karakter
/
: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 dengan2
karakter:
:cocok dengan:
karakter[^ ]*
:cocok dengan sejumlah karakter yang bukan/
:menghentikan pola / memulai string pengganti2:0
:menambahkan2:0
string/
:menghentikan string pengganti / memulai flag polag
:menegaskan untuk melakukan substitusi secara global, yaitu mengganti setiap kemunculan pola pada baris