Jika saya menjalankan kode ini di bash:
echo dog dog dos | sed -r 's:dog:log:'
itu memberikan keluaran:
log dog dos
Bagaimana saya bisa membuatnya menggantikan semua kejadian anjing?
Jika saya menjalankan kode ini di bash:
echo dog dog dos | sed -r 's:dog:log:'
itu memberikan keluaran:
log dog dos
Bagaimana saya bisa membuatnya menggantikan semua kejadian anjing?
Jawaban:
Anda harus menambahkan g
pengubah sehingga sed melakukan substitusi global dari konten buffer pola:
echo dog dog dos | sed -e 's:dog:log:g'
Untuk dokumentasi yang fantastis tentang sed, periksa http://www.grymoire.com/Unix/Sed.html . Ini dunia bendera dijelaskan di sini: http://www.grymoire.com/Unix/Sed.html#uh-6
Dokumentasi resmi GNU sed
tersedia di http://www.gnu.org/software/sed/manual/
sed -E 's,foo,bar,g'
tidak melakukan hal global. Jika Anda mengubahnya agar sed -E -e 's,foo,bar,g'
berfungsi.
Anda harus meletakkan g
di akhir, itu singkatan dari "global":
echo dog dog dos | sed -r 's:dog:log:g'
^
man sed
Ubuntu, -r
opsi ini berarti "gunakan ekspresi reguler yang diperluas". Jadi perintah yang diberikan berfungsi dengan baik, meskipun tidak memerlukan fitur ekspresi reguler yang diperluas agar berfungsi.
g
bendera untuk substitusi global, Anda juga tidak memerlukan-r
opsi di sini.