2017-10-18 7 views
0

Hallo, ich möchte wissen, wie zu grep Zeilen, die ein Wort zweimal in Folge wiederholt haben. Ein Leerzeichen zwischen den beiden Wörtern muss offensichtlich berücksichtigt werden und es muss die Groß-/Kleinschreibung beachtet werden, was meiner Meinung nach grep ist.Wie grep oder egrep Wörter, die zweimal hintereinander erscheinen?

Ich möchte nicht nur eine Antwort, sondern ich möchte wissen, wie es geht und es verstehen. Wer also antwortet, könnte bitte auch erklären, was die Zeile sagt oder was das Muster macht. Ich habe ein grundlegendes zu mittlerem Griff auf grep und bash, aber lerne immer noch alle Feinheiten von grep und die korrelierende Syntax. Jede und jede Hilfe würde sehr geschätzt werden.

Das ist so nah, wie ich nicht bekommen haben lol obwohl ich auch nicht sicher bin, was genau ich hier tue ...

grep '.*\|.*\| ' 

alle Dank !! Prost!

Antwort

0

würden Sie verwenden grep -E '(\<[^[:blank:]]+\>).*\1'

Die \< und \> Wortgrenzen darstellen. Zusammen mit der Folge von nicht-leeren Zeichen bildet das ein einziges Wort. Dann ruft der \1 diesen ersten Satz von einfangenden Klammern zurück.

+0

Leider verwenden viele Tools leicht unterschiedliche Arten von regulären Ausdrücken. Die Regexes für GNU-Tools (grep, awk usw.) finden Sie unter https://www.gnu.org/software/gnulib/manual/html_node/Regular-expression-syntaxes.html#Regular-expression-syntaxes –

0

\ 1 entspricht jeder Zeichenfolge, die mit der ersten übereinstimmenden Zeichenfolge übereinstimmte. Das entspricht nicht dem gleichen Muster, das mit der ersten Zeichenfolge übereinstimmt. Daher ist das erste Capture, das an einer Wortgrenze übereinstimmt, nicht mehr relevant, obwohl sich das \ b innerhalb der Capture-Klammern befindet.

Wenn die zweite Instanz auch auf einer Wortgrenze stehen soll, müssen Sie dies sagen.

Auch mit regulären Ausdrücken können wir sagen, dass wir alle kleinen a-z und großen A-Z Wörter wollen. Auch wenn wir + verwenden, sagen wir, dass die vorhergehenden Zeichen mindestens 1 mal übereinstimmen.

egrep "(\b[a-zA-Z]+) \1\b" file.txt 

Dies zeigt Ihnen alle Wörter, die zweimal verwendet werden.

grep -E "(\b[a-zA-Z]+) \1\b" file.txt 

Dieser Befehl funktioniert auch, wenn Sie lieber grep verwenden möchten. grep -E bedeutet, dass er erweiterte reguläre Ausdrücke verwendet. Es ist also dasselbe wie egrep.

Verwandte Themen