私はこれについて多くの研究をしてきましたが、まだわかりません。何ですか単語の境界意味は?それは何をしますか?
たとえば、誰かが私にこのコマンドを説明できますか?
egrep '\b[A-Z]+\b' filename.sh
答え1
上記のようにここ、たとえば、次のように一致します。〜サイ性格:
3 つの異なる場所が単語の境界として機能します。
- 最初の文字が単語文字の場合は、文字列の最初の文字の前です。
- 文字列の最後の文字の後、最後の文字が単語文字の場合。
- 文字列の2文字の間。そのうちの1つは単語文字で、もう1つは単語文字ではありません。
各状況の例は次のとおりです。
文字列の場合、
foobar
最初のケースは一致します。foobar ^-----here
文字列の場合、
foobar
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
答え2
egrep '\b[A-Z]+\b' filename.sh
それを分析しましょう:
[A-Z]
文字クラスのすべての文字を表します[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
。[A-Z]+
1 つ以上の大文字の発生を示します。一致の例は次のとおりです。A
、、、、など。HELLO
IS
I
ELEPHANT
'\bINDIA\b'
INDIA
:大文字の単語の全単語検索とまったく同じです。そうだろういいえマッチINDIANA
。したがって、同じ原則が適用されます。'\b[A-Z]+\b'
1つ以上の大文字を含む単語全体が検索されます。- したがって、
egrep '\b[A-Z]+\b' filename.sh
ファイル内の1つ以上の大文字 - を含む単語を検索しますfilename.sh
。
\b
- フルワード検索と同じです。