12

我不明白 GNU sed 和 GNU grep 之间的\b区别\<。在我看来,\b总是可以替换\<并且\\>不更改匹配字符串集。

\bsomething更具体地说,我试图找到\\< something 不完全匹配相同字符串的示例。

something\b和的相同问题something\\>

谢谢

4

4 回答 4

14

\b我怀疑无论您使用(更常见)还是(更具体)\<and ,它很少会产生\>影响,但我可以想到一个例子。这是非常人为的,我怀疑在大多数现实世界的正则表达式中使用它不会有所作为,但这应该表明它至少在某些情况下有所作为。

如果我有以下文字:

this is his pig

我想知道是否/\bis\b/匹配,我是否使用/\<is\>/或我是否使用都没有关系/\>is\</

但是,如果我的文字是

is this his pig

在“is”之前不再有词尾边界,只有词首边界。使用/\bis\b/火柴,当然/\<is\>/也可以,但/\>is\</没有。

但是,在现实生活中,我认为您确实需要能够做出这种区分并不常见,这就是为什么(至少在 sed 之外)\b是正则表达式的正常单词边界标记的原因。

于 2014-08-25T17:26:48.287 回答
9

\<匹配从非单词到单词的转换。

\>匹配从单词到非单词的转换。

\b相当于(\<|\>)扩展正则表达式。

所以我不会说\b\<都是一样的。我会说\b\<. 反之亦然。\b_\>

于 2013-06-29T17:49:47.420 回答
4

我之前偶然发现了这样一个例子。
\<.\> 匹配一个单字母单词。
使用 \b 您需要输入 \b[^ ]\b 之类的内容,因为 \b.\b 匹配两个单词之间的空格。

于 2016-01-20T08:20:58.840 回答
1

根据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
  ---------------------------------------------------------------
于 2013-06-29T16:33:44.150 回答