Bash-Skript mit grep -w

Bash-Skript mit grep -w

Ich verwende den folgenden Befehl: x.txt | grep -w 'in' und erhalte Antworten wie: in into ... usw.

Ich will nur die Antwort: in

Wie soll ich den Befehl ändern?

Antwort1

Zunächst sollte der Befehl

grep -w in x.txt

Ihre aktuelle Pipe funktioniert nicht und es ist nicht erforderlich, catdie Datei einfach weiterzuleiten. grepSie können Dateien direkt lesen.

Zweitens -wmacht es genau das, was Sie wollen. Aus der Manpage:

-w, --word-regexp

Wählt nur die Zeilen aus, die Übereinstimmungen enthalten, die ganze Wörter bilden. Der Test besteht darin, dass die übereinstimmende Teilzeichenfolge entweder am Anfang der Zeile stehen oder von einem Nicht-Wortbestandteil-Zeichen eingeleitet werden muss. Ebenso muss sie entweder am Ende der Zeile stehen oder von einem Nicht-Wortbestandteil-Zeichen gefolgt werden. Wortbestandteil-Zeichen sind Buchstaben, Ziffern und der Unterstrich.

grepwird zurückgeben dieKomplette Linienwo das Wort jedoch vorkommt; das ist die Funktion von grep; ich erwähne es, um sicherzustellen, dass Sie dadurch nicht verwirrt werden.

Wenn duNurwollen das Wort zurückgeben, wie Sie sagen, können Sie tun

grep -ow in x.txt

da -onur der passende Teil zurückgegeben wird, was aber recht wirkungslos erscheint.Was versuchen Sie wirklich zu tun?


BEARBEITEN:Ein explizites Beispiel:

$ cat test
word in word
within word
word word
$ grep -w in test
word in word

„innerhalb“ stimmt nicht überein.

EDIT2:Ein anderes Beispiel:

$ grep '\<in\>' test 
word in word

EDIT3:Es wurde angegeben, dass das Problem bei schwedischen Zeichen lag. Ich kann dies reproduzieren, auch wenn die Umgebungsvariable LANGauf eingestellt ist sv_SE.UTF-8.https://stackoverflow.com/questions/9260293/egrep-accented-characters-not-recognised-as-part-of-a-wordschlägt als einfachste Lösung vor, Perl für UTF-8-spezifische Aufgaben zu verwenden.


EDIT4:So wie es aussieht, kann ich seddies mit schwedischen Zeichen zum Laufen bringen:

$ cat test
word den word
avträden word
word word
$ sed -n '/\bden\b/p' test
word den word
$ sed -n '/\<den\>/p' test
word den word

Es handelt sich um eine pragmatische Lösung, die aber hoffentlich für diese Aufgabe geeignet ist.

verwandte Informationen