GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwirrt über Wortgrenze?

Ich habe viel darüber recherchiert, bin mir aber immer noch nicht sicher. Was bedeutet Wortgrenze gemein? Was macht es?

Könnte mir zum Beispiel bitte jemand diesen Befehl erklären?

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

Akzeptierte Antwort:

Wie hier beschrieben, stimmt es zum Beispiel mit zwischen überein Wörter:

Es gibt drei verschiedene Positionen, die als Wortgrenzen gelten:

  1. Vor dem ersten Zeichen in der Zeichenfolge, wenn das erste Zeichen ein Wortzeichen ist.
  2. Nach dem letzten Zeichen in der Zeichenfolge, wenn das letzte Zeichen ein Wortzeichen ist.
  3. Zwischen zwei Zeichen in der Zeichenfolge, wobei eines ein Wortzeichen und das andere kein Wortzeichen ist.

Hier sind Beispiele für jeden dieser Fälle:

  1. Für die Zeichenfolge foobar , der erste Fall stimmt überein

     foobar
    ^-----here
    
  2. Für die Zeichenfolge foobar , der zweite Fall passt

    foobar
          ^--here
    
  3. Für die Zeichenfolge foo bar , der dritte Fall wird übereinstimmen

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

Was als Wortzeichen qualifiziert wird, hängt von der spezifischen Implementierung des regulären Ausdrucks ab. Buchstaben ([a-z] und [A-Z] ), Zahlen ([0-9] ) und _ gelten als Wortzeichen.

Die von Ihnen gepostete Beispiel-Regex (b[A-Z]+b ) bedeutet, die längste Zeichenfolge zu finden, die zwischen zwei Wortgrenzen liegt und nur aus Großbuchstaben besteht. Es könnte einfacher sein, es anhand eines Beispiels zu erklären:

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. Verwirrt über Grep und den Platzhalter *?

  2. Über MySQL

  3. Über PHP

  4. Informationen zu Cloud Server-Images

  5. Über Regionen

[Rezension] Pear OS 8:Alles dreht sich ums Aussehen

Verwirrt über stdin, stdout und stderr?

weniger ist mehr? Ist mehr weniger? ich bin so verwirrt

So entpacken Sie 80-Zeichen-Text

Escape einem Sternzeichen (*) in der Bash

Fragen zur gespeicherten Benutzer-ID