Nếu tôi chạy mã này trong bash:
echo dog dog dos | sed -r 's:dog:log:'
nó cho đầu ra:
log dog dos
Làm thế nào tôi có thể làm cho nó thay thế tất cả các lần xuất hiện của con chó?
Nếu tôi chạy mã này trong bash:
echo dog dog dos | sed -r 's:dog:log:'
nó cho đầu ra:
log dog dos
Làm thế nào tôi có thể làm cho nó thay thế tất cả các lần xuất hiện của con chó?
Câu trả lời:
Bạn nên thêm công cụ gsửa đổi để sed thực hiện thay thế toàn bộ nội dung của bộ đệm mẫu:
echo dog dog dos | sed -e 's:dog:log:g'
Để có một tài liệu tuyệt vời về sed, hãy kiểm tra http://www.grymoire.com/Unix/Sed.html . Đây toàn cầu cờ được giải thích ở đây: http://www.grymoire.com/Unix/Sed.html#uh-6
Tài liệu chính thức GNU sedcó sẵn tại http://www.gnu.org/software/sed/manual/
sed -E 's,foo,bar,g'không làm điều toàn cầu. Nếu bạn thay đổi nó để sed -E -e 's,foo,bar,g'nó hoạt động.
Bạn phải đặt gcuối cùng, nó là viết tắt của "toàn cầu":
echo dog dog dos | sed -r 's:dog:log:g'
^
man sedtrên Ubuntu, -rtùy chọn này có nghĩa là "sử dụng các biểu thức chính quy mở rộng". Vì vậy, lệnh đã cho hoạt động tốt, mặc dù nó không cần các tính năng của biểu thức chính quy mở rộng để hoạt động.
gcờ thay thế toàn cầu, bạn cũng không cần-rtùy chọn ở đây.