![仅当模式匹配整个单词时才替换模式](https://linux22.com/image/108992/%E4%BB%85%E5%BD%93%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D%E6%95%B4%E4%B8%AA%E5%8D%95%E8%AF%8D%E6%97%B6%E6%89%8D%E6%9B%BF%E6%8D%A2%E6%A8%A1%E5%BC%8F.png)
可以说我尝试用这样的方式替换
asdasdasdHit Hitasdasd Hit Hit
Hitasda Hit Hit asdaHit Hit Hit
Hit Hitasda Hit
...
...
有没有办法让每个“干净”的点击都替换为“OK”?我尝试了 /g 但后来一切都OK了,s/\ Hit\ /OK/g
换行符上的点击丢失了。
答案1
是的。
$ sed 's/\<Hit\>/OK/g' file
asdasdasdHit Hitasdasd OK OK
Hitasda OK OK asdaHit OK OK
OK Hitasda OK
...
...
将\<
在单词开头匹配零长度单词边界,并\>
在单词末尾执行相同操作。
这零长度of\<
和\>
意味着它们不会匹配任何字符本身,但会强制相邻模式在单词边界上匹配。
A字边界是字符串中字母数字字符与非字母数字字符相邻的点,例如字符串中的␣
(一个空格) 和之间的点和H
之间的点(另一个空格),或者紧邻 和之间的点在示例数据中的所有三行上都遵循换行符。t
␣
␣Hit␣
t
对于 GNU,sed
你可以使用and\b
代替(尽管它也理解and ):\<
\>
\<
\>
$ sed 's/\bHit\b/OK/g' file
...但 BSDsed
不明白\b
。