12

GNU sed と GNU grepの\bandの違いがわかりません。一致する文字列のセットを変更せずに、いつでも置き換えることができる\<ようです。\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 に答える
4

私は以前にそのような例に出くわしました。
\<.\> は 1 文字の単語に一致します。
\b.\b は 2 つの単語の間のスペースに一致するため、\b を使用すると、\b[^ ]\b のようなものを配置する必要があります。

于 2016-01-20T08:20:58.840 に答える
1

LinuxTopiaによると、2 つのタイプの単語境界の唯一の違いは、 while\<\>ほとんどの sed バージョンで機能することです。後者\bは、システムがgsedを使用している場合にのみ機能します

そしてウィキからの引用:

これらの記号には、'\<' と '>' (gsed、ssed、sed15、sed16、sedmod) および '\b' と '\B' (gsed のみ) が含まれます。

それ以外は、2つは同一です。また、単語境界を使用する可能性のあるすべてのシナリオを説明する表を次に示します。

  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 に答える