私はこれをたくさん研究してきましたが、まだはっきりしていません。 単語の境界とは 平均?それは何をしますか?
たとえば、誰かがこのコマンドを私に説明してもらえますか?
egrep 'b[A-Z]+b' filename.sh
承認された回答:
ここで説明するように、たとえば、 between 言葉:
単語の境界として適格な3つの異なる位置があります:
- 文字列の最初の文字の前、最初の文字が単語文字の場合。
- 文字列の最後の文字の後、最後の文字が単語文字の場合。
- 文字列内の2つの文字の間。一方は単語文字で、もう一方は単語文字ではありません。
これらの各ケースの例を次に示します。
-
文字列
foo bar
の場合 、最初のケースが一致しますfoobar ^-----here
-
文字列
foo bar
の場合 、2番目のケースが一致しますfoobar ^--here
-
文字列
foo bar
の場合 、3番目のケースが一致しますfoo bar ^--here, because space is not a word character
単語文字としての資格は、特定の正規表現の実装によって異なります。ただし、すべての場合において、文字([a-z]
および[A-Z]
)、数字([0-9]
)および_
単語の文字と見なされます。
したがって、投稿した正規表現の例(b[A-Z]+b
)は、2つの単語の境界の間にあり、大文字のみで構成される最長の文字列を見つけることを意味します。例で説明する方が簡単かもしれません:
echo "FOOBAR" | egrep 'b[A-Z]+b' # Works
echo "FOO BAR" | egrep 'b[A-Z]+b' # Works
echo "aFOOBARb" | egrep 'b[A-Z]+b' # Does not work, we want capitals only
echo "12345" | egrep 'b[A-Za]+b' # Does not work, no letters
echo "1FOOBAR2" | egrep 'b[A-Z]+b' # Does not work, 1 and 2 are word chars
echo "_FOOBAR_" | egrep 'b[A-Z]+b' # Does not work, _ is a word char
echo "#FOOBAR$" | egrep 'b[A-Z]+b' # Works, # and $ are not word chars