PCRE grepの「\b」と「\S」の違いは何ですか?

PCRE grepの「\b」と「\S」の違いは何ですか?

今知っています\bWord Boundaries

しかし、

\s\SあるShorthand Character Classes

どこ

\s(小文字)スペース(スペース、タブ、vtab、改行)

そして

\S(大文字)はその逆です。スペース以外

wolf@linux:~$ cat space.txt 
0space
1 spaces
2  spaces
3   spaces
4    spaces
wolf@linux:~$ 

これら2つのコマンドの間には違いはありません。

wolf@linux:~$ grep -P '\S\s\S' space.txt 
1 spaces
wolf@linux:~$ grep -P '\S\s\S\S' space.txt 
1 spaces
wolf@linux:~$ 

そして

wolf@linux:~$ grep -P '\b\s\b' space.txt
1 spaces
wolf@linux:~$ grep -P '\b\s\b\b' space.txt
1 spaces
wolf@linux:~$ 

引用:https://staff.washington.edu/weller/grep.html

ベストアンサー1

GNUを使用した例sed

\b文字列の各項目を括弧で囲みますHello world!

$ sed 's/\b/(&)/g' <<<'Hello world!'
()Hello() ()world()!

ご覧のとおり、一致\bする文字はありません。代わりに、各単語の先頭と末尾の幅がゼロの単語境界を一致させます。

その後、同じことを行います\S

$ sed 's/\S/(&)/g' <<<'Hello world!'
(H)(e)(l)(l)(o) (w)(o)(r)(l)(d)(!)

\S空白以外のすべての文字と一致します。

特定の数のスペースを一致させたい場合に使用します\S\s{3}\S。これを行うには、3つのスペースと一致しますが、スペースを空白以外の文字で両側に囲む必要があります。行の先頭または末尾にスペースがある場合、この式の一致は失敗します。

を使用する場合は、\b\s{3}\b単語の境界で囲まれた3つのスペースが必要です。これ会議これは、行の先頭または末尾にスペースが表示される可能性がある場合でも一致します。ただし、スペースが単語以外の文字(文字列など)で囲まれていると失敗しますhello;   ;world

ちなみに、\sPOSIX文字クラスと同様に、スペースとタブ(および他のいくつかの文字)の両方と一致します[[:space:]]。スペースのみを一致させるには、スペース文字を使用します。空白以外の文字も一致させることができます[^ ]

おすすめ記事