it-swarm.com.de

Grep-Muster mit führenden Leerzeichen

Ich brauche Hilfe beim Einstellen des richtigen Musters für grep. Ich muss alle Vorkommen von pattern finden, wobei Zeile kann haben führende Leerzeichen. Zum Beispiel: In der folgenden Datei:

 1. No pattern recognized.
 2. Pattern to be recognized
 3.          Pattern to be recognized here also
 4.  pattern with only one leading space 

Ich möchte nur die Zeilen 2,3 und 4 lesen. Die Zeilennummern dienen nur als Referenz.

Bisher habe ich folgendes versucht:

grep -i '^ [[:blank:]]pattern', gibt aber nur Zeile 4 zurück.

grep -i '[[:blank:]]pattern' gibt 1,3 und 4 zurück.

grep -i '^[[:blank:]]pattern' gibt 1,3 und 4 zurück.

- Mike P.S. Wenn dies nicht das passende Forum ist, dann leite mich bitte entsprechend.

2
Mike V.D.C.

Ihre Zeilen 2 und 3 haben den Großbuchstaben P und erfordern keine oder mehrere Leerzeichen. Geben Sie also genau Folgendes an:

$ grep '[[:blank:]]*Pattern'  input.txt                                  
 Pattern to be recognized
         Pattern to be recognized here also

Persönlich würde ich empfehlen, Ihr Muster mit etwas anderem zu erweitern, wie '[[:blank:]]Pattern.*recognized'

2

Was ich bekomme, ist, dass Sie entweder gar kein führendes Leerzeichen wie Zeile 2 oder mehr als ein Leerzeichen haben möchten, weil Sie Zeile 4 mit einem Leerzeichen ausschließen.

also schlage ich vor:

egrep -i '^\s*pattern' file.txt | grep -v '^\spattern'

oder mit einem einzelnen awk:

awk 'tolower($0) ~ /^\s*pattern/ && !/^\spattern/ ' file.txt
  • \s als Leerzeichen können Sie es mit blank ändern, wenn Sie möchten.
  • egrep -i '^\s*pattern' file.txt Zuerst werden alle Zeilen mit oder ohne vorangestelltem Leerzeichen nach Muster gestartet.
  • grep -v '^\spattern': dann schließen wir diejenigen aus, die genau ein führendes Leerzeichen enthalten.

Das obige Beispiel funktioniert mit einer Datei ohne Nummerierung. Wenn Ihre Datei führende Nummern enthält, verwenden Sie diese:

egrep -i '\s*pattern' file.txt | grep -v '\spattern'

oder für awk:

awk 'tolower($0) ~ /\s*pattern/ && !/\spattern/ ' file.txt
2
Ravexina