2016-06-30 9 views
1

Ich habe eine mehrzeilige Datei im Format:Wie grep Strings, die eine Abfragezeichenfolge mit beliebigen 2 Zeichen am Anfang "xxTHISISMYSTRING" aus einer Datei enthalten?

hhhhhhhhhhhhhhhhhhh hhaaaa hhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhhh oaaaaa hhhhhhhhhhhhhh hhhhhhhhhhhh hbaaaa hhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhh fbaaaa hhhhhhhhhhhh

Ich möchte um alle Zeichenfolgen zu finden, die th enthalten Das Motiv "aaaa" sowie die beiden davor liegenden Buchstaben.

Wie würde ich die Strings grep: hhaaaa, oaaaaa, hbaaaa, fbaaaa? Mit "aaaa" als meine Eingabe.

+0

so etwas wie 'grep‚[A-Za-z] \ {2 \} aaaa "Datei"? – runningviolent

Antwort

2

Um jede Zeichen in einem regulären Ausdruck zu entsprechen, verwenden .:

$ grep -o ..aaaa file 
hhaaaa 
hoaaaa 
hbaaaa 
fbaaaa 

Die -o Option weist grep nur die Spiele, nicht den Kontext für die Spiele zu drucken.

Um das Spiel zu alphabetischen Zeichen, verwenden Sie die alphabetische Klasse einschränken:

$ grep -Eo '[[:alpha:]]{2}aaaa' file 
hhaaaa 
hoaaaa 
hbaaaa 
fbaaaa 

[[:alpha:]] entspricht einem beliebigen alphabetischen Zeichen. Im Gegensatz zu A-Z ist dies Unicode-sicher. Die {2} zeigt zwei solche Zeichen an. Um Backslashes zu vermeiden, haben wir das Flag -E hinzugefügt, um erweiterten Regex zu aktivieren.

2
grep -oh "..aaaa" file.txt 

wird tun.

-h, --no-Dateinamen
Unterdrückt die Vorfixierung der Dateinamen auf die Produktion. Dies ist der Standardwert
, wenn nur eine Datei (oder nur Standardeingabe) gesucht werden soll.
-o, --only-matching
Drucken Sie nur die übereinstimmenden (nicht leeren) Teile einer übereinstimmenden Linie,
mit jedem solchen Teil auf einer separaten Ausgangsleitung.

2
grep -o '..aaaa' file 

sollte es tun. Wäre das Ziel gewesen, die Gesamtübereinstimmungen zu zählen, dann tun:

grep -o '..aaaa' file | wc -l 

GREP manpage sagt:

-o, --only Anpassungs
Drucken nur die angepassten (nicht leer) Teile eine übereinstimmende Linie, mit jedem solchen Teil auf einer separaten Ausgangslinie.

WC manpage sagt:

-l, die Zeilenanzahl --lines
Druck