Ich suche nach einem regulären Ausdruck, der alle Vorkommen von Doppelzeichen in einem Text, einer Auflistung usw. in der Befehlszeile (Bash) findet.
Haupt Frage : Gibt es eine einfache Art und Weise zu suchen Sequenzen wie aa
, ll
, ttttt
usw. , wo man definiert ein regulärer Ausdruck , dass sieht für n Vorkommen des gleichen Zeichens mit? Was ich suche, ist dies auf einer sehr sehr grundlegenden Ebene zu erreichen. In der Kommandozeile. In einer Linux-Shell.
Nach einigen Recherchen kam ich zu den folgenden Antworten - und den daraus resultierenden Fragen, daher gaben sie mir nur einen Hinweis, wo die Lösung liegen könnte. Aber:
a) (e) grep und das Backslash-Problem
grep 'a\{2\}'
schaut nachaa
egrep'a{2}'
schaut nachaa
Frage: Ist die Notwendigkeit, Spiel zu setzen, wirklich an den von mir verwendeten Befehl gebunden? Wenn ja, kann mir jemand einen Hinweis geben, was bei der Verwendung von (e) grep hier noch zu beachten ist?
b) Ich habe diese Antwort hier für meine Frage gefunden, obwohl es nicht genau das ist, wonach ich gesucht habe:
grep -E '(.)\1' filename
sucht nach Einträgen mit demselben Zeichen, die mehrmals vorkommen, fragt aber nicht, wie oft . Dies kommt dem nahe, wonach ich suche, aber ich möchte immer noch eine Reihe von Wiederholungen festlegen.
Ich sollte das wahrscheinlich in zwei oder mehr Fragen aufteilen, aber dann möchte ich diese großartige Seite hier nicht überfluten.
PS: Noch eine Frage, die möglicherweise aus Thema , aber: ist es in
, inside
, at
oder on the shell
. Und ist on the command line
richtig?
egrep
wenn ich reguläre Ausdrücke benötige (im Gegensatz zu einfachem String-Matching), damit ich mir keine Gedanken über die Unterschiede zwischengrep
den beiden machen muss Arten von regulären Ausdrücken.grep '\(.\)\1\{3\}'
also Standard,grep -E '(.)\1{3}'
nicht.Dies würde nach zwei oder mehr Vorkommen desselben Charakters suchen:
Wenn Ihr awk die Option -o hat, wird dies jedes Match in eine neue Zeile drucken.
So finden Sie Übereinstimmungen mit genau 3 Übereinstimmungen:
Oder 3 oder mehr:
etc..
bearbeiten
Eigentlich geht es bei @stephane_chazelas um Rückverweise und -E. Das hatte ich vergessen. Ich habe es in BSD grep und GNU grep versucht und es funktioniert dort, aber es ist nicht in einigen anderen greps. Sie müssten eine der folgenden Versionen verwenden.
Regelmäßige grep-Versionen:
Die
-o
Option ist auch nicht Standard-Grep BTW (wahrscheinlich, wenn Ihr Grep -o versteht, kann er auch die Rückreferenz machen).Hinweis :
grep -E '(.)\1{2,}'
Datei undgrep '\(.\)\1\{2\}'
Datei sind wie angegeben falsch und sollten ignoriert werden.quelle
-E
Optiongrep
nicht viel tun würde? Dies würde ziemlich viel erklären, zum Beispiel, warum ich so viel Zeit damit verschwendet habe, zu suchen, wo ich falsch lag!+
Operator. Ich werde auch Beispiele veröffentlichen.grep -E '(.)\1{2}'
nicht genau "Übereinstimmungen mit genau 3 Übereinstimmungen finden". Während es wird passen genau drei identische Zeichen, können sie in einem längeren wiederholten Zeichenfolge eingebettet werden; z. B. wird es in der Zeichenfolge mit 5 Symbolen übereinstimmenAAAAA
. (Und wenn es 6 oder mehr aufeinanderfolgende Symbole gibt, wird es mehr als einmal übereinstimmen).Zunächst einmal vielen Dank für Ihre unterstützenden Kommentare und Vorschläge. Wie sich herausstellte, war ich der Antwort schon ziemlich nahe.
Das Hauptproblem war über:
Kurze Antwort :
Die folgenden [Variationen von] Befehlen werden
a
mindestens einmal und unendlich oft wiederholtgrep 'a\{1,}
grep -E \(a\)\{1,\}
egrep a{1,}
oder mit regulären GNU-Ausdrücken
grep a\+
Die Anzahl der Wiederholungen sind in geschweiften Klammern, durch das Muster festgelegt
{min,max}
→{n}
Wiederholung genaun
mal,{n,}
wiederholen Sie mindestensn
mal und{n,m}
wiederholen Sie mindestensn
aber höchstensm
mal.Infolgedessen wurde das sekundäre Problem aufgeworfen :
Kurze Antwort : Ja, die Verwendung von Backslashes hängt davon ab, ob man
grep
oder verwendetegrep
grep
: Backslash aktiviert Metazeichen [verwendet grundlegende reguläre Ausdrücke]egrep
Backslash de -activates Metazeichen [Anwendungen Reguläre Ausdrücke Erweiterte]Da dies die kurze Antwort ist, möchte ich denjenigen, die auf vergleichbare Probleme gestoßen sind, eine grundlegende Zusammenfassung dessen hinzufügen, was man anscheinend wissen muss, mit
grep
und arbeitetegrep
.Grundlegende, erweiterte und reguläre GNU-Ausdrücke
Grundlegende reguläre Ausdrücke
Verwendet in
grep
,ed
undsed
BefehlGrundlegende Funktionen für reguläre Ausdrücke sind:
? [ . \ )
. B. usw., werden durch einen Backslash aktiviert. Wenn es keinen Backslash gibt, werden sie als (Teil des) Suchbegriffs verwendet.^ $ \<
und\>
werden ohne Backslash unterstützt\b
,\s
etc.]GNU Basic Regular Expressions ergänzen diese
\?
Wiederholen Sie das Zeichen null oder einmal (c\?
entsprichtc
undcc
) und ist eine Alternative für\{0,1\}
\+
wiederhole ein Zeichen mindestens einmal (c\+
Spielecc
,cccccccc
etc.) und ist eine Alternative für\{1,\}
\|
wird unterstützt (zBgrep a\|b
wird nacha
oder gesuchtb
grep -E
Aktiviert den Befehl zur Verwendung des gesamten Satzes der erweiterten regulären Ausdrücke:Erweiterte reguläre Ausdrücke [ERE]
Verwendet in
egrep
,awk
undemacs
ist die Basis - Set plus einige ziemlich Funktionen.GNU Erweitern Sie reguläre Ausdrücke
fügt die folgenden Funktionen hinzu
Die beiden Links leiten einen zu regulär-expressions.info, was mir zusätzlich zu der großartigen Unterstützung, die ich hier habe, sehr geholfen hat.
quelle