Ich versuche also, Wörter mit 6 Buchstaben zu finden, die aus einem Zeichen bestehen, das dreimal wiederholt wird, gefolgt von einem anderen Zeichen, das dreimal wiederholt wird. Zum Beispiel aaabbb
oder oookkk
.
Ich versuche:
grep -E "[a-z]\1{3}\S[a-z]\1{3}" filename
Ist der Regex korrekt? Zweitens, warum bekomme ich grep: Invalid back reference
?
command-line
grep
regular-expression
Highlights Fabrik
quelle
quelle
aaabbbfoobar
? Was ist mitaaaabbb
? Zeigen Sie uns im Idealfall einige Beispieleingaben und Ihre gewünschte Ausgabe.grep -E '([a-z]{2})([0-9]{2})\2\1'
würde übereinstimmenaa9999aa
.oookkk
(nicht länger als 6 Zeichen) NICHT Wörteroookkk
wieoookkkfoobar
grep -w
Beispiel, das ich in meiner Antwort gegeben habe.aaaaaa
oder brauchst du mindestens zwei verschiedene Charaktere? Bitte geben Sie uns eine Beispieleingabe und die gewünschte Ausgabe.Antworten:
Nein, das stimmt nicht. Ich habe keine Ahnung, was das sein
\1{3}
soll, aber das ist es, was dir Probleme bereitet. Wenn Sie Zeilen suchen möchten, die drei wiederholte Zeichen gefolgt von drei weiteren wiederholten Zeichen enthalten, können Sie Folgendes verwenden:Das
\1
bezieht sich auf die erste erfasste Gruppe. Sie können Gruppen mithilfe von Klammern erfassen. Dann\1
ist die 1. solche Gruppe und\2
ist die zweite und so weiter. Da Sie keine erfassten Gruppen hatten,grep
beschwerten Sie sich über eine ungültige Referenz, da sie nichts zu referenzieren hatte. In der obigen Regex erfassen die Klammern die beiden Gruppen. Dann möchten Sie{2}
und nicht,{3}
da auch die anfängliche Übereinstimmung gezählt wird.Sie geben nicht an, ob die Übereinstimmung ein Wort sein soll oder ob Sie auch innerhalb von Wörtern übereinstimmen möchten. Wenn Sie möchten, dass das gesamte Wort übereinstimmt (und Dinge wie ausschließen)
aaaabbb
, verwenden Sie stattdessen Folgendes:Verwenden Sie (nur GNU grep), um nur den übereinstimmenden Teil der Zeile (das Wort) und nicht die gesamte Zeile zu drucken:
quelle