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 gpengubah 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 sedtersedia 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 gdi akhir, itu singkatan dari "global":
echo dog dog dos | sed -r 's:dog:log:g'
^
man sedUbuntu, -ropsi ini berarti "gunakan ekspresi reguler yang diperluas". Jadi perintah yang diberikan berfungsi dengan baik, meskipun tidak memerlukan fitur ekspresi reguler yang diperluas agar berfungsi.
gbendera untuk substitusi global, Anda juga tidak memerlukan-ropsi di sini.