Zugriff auf die GNU-Dokumentation:
‘\<’ Match the empty string at the beginning of word.
‘\>’ Match the empty string at the end of word.
Meine / etc / fstab sieht so aus:
/dev/sdb1 /media/fresh ext2 defaults 0 0
Ich möchte, dass grep TRUE / FALSE für die Existenz von / media / fresh zurückgibt. Ich habe versucht , zu verwenden \<
und , \>
aber es hat nicht funktioniert. Warum?
egrep '\</media/fresh\>' /etc/fstab
Problemumgehung:
egrep '[[:blank:]]/media/fresh[[:blank:]]' /etc/fstab
Sieht aber hässlicher aus.
Mein grep ist 2.5.1
grep
regular-expression
Felipe Alvarez
quelle
quelle
/
es kein Wortzeichen ist, also passt Regex nicht zusammen - "\ b passt vor und nach einer alphanumerischen Sequenz" ist genauer als "vor und nach einem Wort" zu sagenAntworten:
\<
und\>
stimmen mit leerer Zeichenfolge am Anfang bzw. Ende eines Wortes überein, und nur wortbestandteilende Zeichen sind:Von
man grep
:Ihr Regex scheitert also, weil
/
es sich nicht um ein gültiges Wort handelt.Anstelle von Leerzeichen können Sie die
-w
Option verwendengrep
, um ein Wort zu suchen:Beispiel:
quelle
Dieses Problem mit
\<
(und auch\b
) betrifft nicht nur/
alle Nicht-Wort-Zeichen. (dh andere Zeichen als[[:alnum:]]
und_
.)Das Problem ist, dass die Regex-Engine immer ein Nicht-Wort-Zeichen umgeht, wie
/
bei der Suche nach dem nächsten Anker\<
. Aus diesem Grund sollten Sie keine Nicht-Wort-Zeichen wie/
direkt danach einfügen\<
. Wenn Sie dies tun, wird konstruktionsbedingt nichts zusammenpassen.Eine Alternative zur
-w
Option grep wäre etwa Folgendes:quelle