GNU/Linux >> Znalost Linux >  >> Linux

Jste zmateni hranicemi slov?

Hodně jsem to zkoumal, ale stále v tom nemám jasno. Co znamená hranice slova znamenat? Co to dělá?

Mohl by mi tedy například někdo vysvětlit tento příkaz?

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

Přijatá odpověď:

Jak je popsáno například zde, odpovídá mezi slova:

Existují tři různé pozice, které se kvalifikují jako hranice slov:

  1. Před prvním znakem v řetězci, pokud je prvním znakem slovo.
  2. Za posledním znakem v řetězci, pokud je posledním znakem slovo.
  3. Mezi dvěma znaky v řetězci, kde jeden je znak slova a druhý není znak slova.

Zde jsou příklady každého z těchto případů:

  1. Pro řetězec foobar , první případ odpovídá

     foobar
    ^-----here
    
  2. Pro řetězec foobar , druhý případ odpovídá

    foobar
          ^--here
    
  3. Pro řetězec foo bar , třetí případ bude odpovídat

    foo bar
       ^--here, because space is not a word character
    

Co se kvalifikuje jako slovní znak, závisí na konkrétní implementaci regulárního výrazu. Ve všech případech však písmena ([a-z] a [A-Z] ), čísla ([0-9] ) a _ jsou považovány za slovní znaky.

Takže příklad regulárního výrazu, který jste zveřejnili (b[A-Z]+b ) znamená najít nejdelší řetězec, který je mezi dvěma hranicemi slov a který se skládá pouze z velkých písmen. Mohlo by být snazší vysvětlit to na příkladu:

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. Rozšířené Ascii v Linuxu

  2. Neblokující získat charakter

  3. Jak rozbalit 80znakový text

  1. Používáte zalamování slov s Mc?

  2. Escape znak hvězdičky (*) v bash

  3. Otázky týkající se uloženého ID uživatele

  1. Jste zmateni Grepem a zástupným znakem *?

  2. O MySQL

  3. O PHP