我不明白 GNU sed 和 GNU grep 之间的\b区别\<。在我看来,\b总是可以替换\<并且\\>不更改匹配字符串集。
\bsomething更具体地说,我试图找到\\< something
不完全匹配相同字符串的示例。
something\b和的相同问题something\\>。
谢谢
\b我怀疑无论您使用(更常见)还是(更具体)\<and ,它很少会产生\>影响,但我可以想到一个例子。这是非常人为的,我怀疑在大多数现实世界的正则表达式中使用它不会有所作为,但这应该表明它至少在某些情况下会有所作为。
如果我有以下文字:
this is his pig
我想知道是否/\bis\b/匹配,我是否使用/\<is\>/或我是否使用都没有关系/\>is\</
但是,如果我的文字是
is this his pig
在“is”之前不再有词尾边界,只有词首边界。使用/\bis\b/火柴,当然/\<is\>/也可以,但/\>is\</没有。
但是,在现实生活中,我认为您确实需要能够做出这种区分并不常见,这就是为什么(至少在 sed 之外)\b是正则表达式的正常单词边界标记的原因。
\<匹配从非单词到单词的转换。
\>匹配从单词到非单词的转换。
\b相当于(\<|\>)扩展正则表达式。
所以我不会说\b和\<都是一样的。我会说\b是\<. 反之亦然。\b_\>
我之前偶然发现了这样一个例子。
\<.\> 匹配一个单字母单词。
使用 \b 您需要输入 \b[^ ]\b 之类的内容,因为 \b.\b 匹配两个单词之间的空格。
根据LinuxTopia的说法,这两种类型的单词边界之间的唯一区别是while\<和\>work 在大多数 sed 版本中;后者\b仅在您的系统使用gsed 时才有效
以及来自维基的引文:
这些符号包括'\<'和'>'(gsed、ssed、sed15、sed16、sedmod)和'\b'和'\B'(仅gsed)。
除此之外,两者是相同的。这里还有一个表格,解释了所有使用单词边界的可能场景:
Match position Possible word boundaries HHsed GNU sed
---------------------------------------------------------------
start of word [nonword char]^[word char] \< \< or \b
end of word [word char]^[nonword char] \> \> or \b
middle of word [word char]^[word char] none \B
outside of word [nonword char]^[nonword char] none \B
---------------------------------------------------------------