
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, cat
die Datei einfach weiterzuleiten. grep
Sie können Dateien direkt lesen.
Zweitens -w
macht 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.
grep
wird 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 -o
nur 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 LANG
auf 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 sed
dies 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.