Suchen Sie nach alphanumerischen Zeichenfolgen beliebiger Länge mit einem Doppelpunkt auf jeder Seite

14

Wie würden Sie nach alphanumerischen Zeichenfolgen mit 1 bis 50 Zeichen (im Idealfall mit beliebiger Länge) mit einem Doppelpunkt auf jeder Seite suchen - ein typisches Ergebnis wären alle Zeilen, die die Zeichenfolge enthalten :shopping:. Bisher habe ich den folgenden Code (ich habe einige Variationen davon ausprobiert), der nicht funktioniert:

grep ':[[:alnum:]]{1,100}:' ~/x.txt

quelle
Sie müssen nur die erweiterten regulären Ausdrücke aktivieren, grepindem Sie den -ESchalter einschließen .
SLM

Antworten:

13

Sie müssen dafür erweiterte reguläre Ausdrücke aktivieren:

grep -E ':[[:alnum:]]+:' ~/x.txt
Joseph R.
quelle
4

Mit einfachen regulären Ausdrücken können Sie Folgendes schreiben:

grep ':[[:alnum:]]\{1,100\}:' ~/x.txt

Beachten Sie, dass \{(im Gegensatz zu \+oder \?zum Beispiel) Standard und portabel ist und die BRE-Entsprechungen von +und ?normalerweise mit \{: \{1,\}und geschrieben werden \{0,1\}. grep -EEs ist jedoch auch Standard und portabel, sodass Sie es genauso gut verwenden können, da es in diesen Fällen zu besser lesbaren regulären Ausdrücken führt.

Stéphane Chazelas
quelle
1

Sie verwenden einen erweiterten regulären Ausdruck, daher müssen Sie die Option -E verwenden:

grep -E ':[[:alnum:]]{1,100}:' ~/x.txt
Msegade
quelle
Vielen Dank! Ich habe die andere Antwort als richtig eingestuft, weil ich mein "ideales" Skript nicht in die Überschrift geschrieben habe, und ich möchte niemanden, der nach einer Antwort sucht, dazu bringen, die falsche Antwort zu kopieren und einzufügen, aber ich werde Ihre verwenden. :)
1
@TorThommesen - Sie können den Titel Ihres Q bearbeiten, wenn er nicht korrekt ist.
slm
0

Da es sonst niemand erwähnte, können Sie auch verwenden egrep, was, wie ich es verstehe, äquivalent ist grep -E.

egrep ':[[:alnum:]]{1,100}:' ~/x.txt
sherrellbc
quelle
1
egrepwar der historische Befehl, mit EREs zu greifen. Die Funktionalität von grep und egrep wurde (vor langer Zeit) mit der Option -E in grep zusammengeführt. egrepwird jetzt als veraltet / veraltet betrachtet (aber es ist unwahrscheinlich, dass dies passiert, da einige Leute immer noch daran gewöhnt sind).
Stéphane Chazelas