Câu trả lời:
\ b trong biểu thức chính quy khớp với ranh giới từ (nghĩa là vị trí giữa ký tự từ đầu tiên và ký tự không phải từ):
$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
\band\blưu ngày :)
Trên Mac OS X, cả hai cú pháp regex này đều không hoạt động bên trong sed để đối sánh toàn bộ các từ
\bmyWord\b\<myWord\>Nghe tôi bây giờ và tôi tin rằng sau đó, này cú pháp xấu xí là những gì bạn cần phải sử dụng:
/[[:<:]]myWord[[:>:]]/Vì vậy, ví dụ, để thay thế bạc hà bằng bạc hà chỉ cho toàn bộ các từ:
sed "s/[[:<:]]mint[[:>:]]/minty/g"Nguồn: re_format man page
sed(và mọi công cụ GNU khác) thông qua MacPorts hoặc Homebrew và đảm bảo nó xuất hiện trước tiên trong bạn PATH. Có thể làm cho một máy Mac khá khả dụng.
brew install coreutils, tiền tố của tất cả các công cụ gnu.
brew install gnu-sedđể sử dụnggsed
perl -pe 's|\bone\b|two|g'. Hoạt động ổn định trong khi sed bị lỗi chỗ này chỗ kia.
Sử dụng \bcho ranh giới từ:
sed -i 's/\boldtext\b/newtext/g' <file>
[]: o,l-> [newtext],[newtext]. Ý của bạn rõ ràng là sed -i 's/\boldtext\b/newtext/g'
Trong một máy của tôi, việc phân định từ bằng " \b" (không có dấu ngoặc kép) không hoạt động. Giải pháp là sử dụng " \<" để bắt đầu dấu phân cách và " \>" để kết thúc dấu phân cách.
Để giải thích bằng ví dụ của Joakim Lundberg :
$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment
trong lệnh shell:
echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
hoặc là:
echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
nhưng nếu bạn đang ở trong vim, bạn chỉ có thể sử dụng sau này:
:% s/\<old\>/new/g
$ echo "bar embarassment"|awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1'
no bar embarassment
echo " bar embarassment " | awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1' | cat -Echo no bar embarassment$.