GNU/Linux >> Linux の 問題 >  >> Linux

単語の境界について混乱していますか?

私はこれをたくさん研究してきましたが、まだはっきりしていません。 単語の境界とは 平均?それは何をしますか?

たとえば、誰かがこのコマンドを私に説明してもらえますか?

egrep 'b[A-Z]+b' filename.sh

承認された回答:

ここで説明するように、たとえば、 between 言葉:

単語の境界として適格な3つの異なる位置があります:

  1. 文字列の最初の文字の前、最初の文字が単語文字の場合。
  2. 文字列の最後の文字の後、最後の文字が単語文字の場合。
  3. 文字列内の2つの文字の間。一方は単語文字で、もう一方は単語文字ではありません。

これらの各ケースの例を次に示します。

  1. 文字列foo barの場合 、最初のケースが一致します

     foobar
    ^-----here
    
  2. 文字列foo barの場合 、2番目のケースが一致します

    foobar
          ^--here
    
  3. 文字列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

Linux
  1. LinuxでWCコマンドを使用して文字、バイト、改行、単語数を出力する方法

  2. Grepと*ワイルドカードについて混乱していますか?

  3. MySQLについて

  1. PHPについて

  2. CloudServerイメージについて

  3. 地域について

  1. ノンブロッキング Get Character

  2. 文字列に改行を追加、クロスプラットフォーム

  3. bash でアスタリスク (*) 文字をエスケープする