今知っています\b
。Word 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:~$
ベストアンサー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
。
ちなみに、\s
POSIX文字クラスと同様に、スペースとタブ(および他のいくつかの文字)の両方と一致します[[:space:]]
。スペースのみを一致させるには、スペース文字を使用します。空白以外の文字も一致させることができます[^ ]
。