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ụ g
sử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 sed
có 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 g
cuố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 sed
trên Ubuntu, -r
tù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.
g
cờ thay thế toàn cầu, bạn cũng không cần-r
tùy chọn ở đây.