Wie grepst du ein Leerzeichen im Text?

cat a.txt| grep " " 

oder

cat a.txt| grep "\s " 

Kommentare

  • Kostenlose Verwendung von cat in beiden Fällen. Das erste könnte geschrieben werden grep ' ' a.txt, das zweite ähnlich geändert werden.
  • Beachten Sie, dass \s auch mit tab, return, übereinstimmt. vertikale Registerkarte, Formularvorschub und technisch Newline. Wenn Sie nur Leerzeichen und Tabulatoren abgleichen möchten, verwenden Sie [[:blank:]] oder [ \t].
  • Sie können gnu grep verwenden Begrenzen Sie die Anzahl der Übereinstimmungen (-m Option) auf eins …
  • Dies ist einfacher egrep " \ s " a.txt

Antwort

Wenn Sie möchten Wenn Sie nur ein Leerzeichen eingeben, während Sie Ihre Frage eingeben, verwenden Sie Folgendes:

grep -e "^\s[^\s]" -e "[^\s]\s$" -e "[^\s]\s[^\s]" a.txt 

oder für POSIX-Varianten:

grep -e "^ [^ ]" -e "[^ ] $" -e "[^ ] [^ ]" a.txt 

oder die weniger lesbare POSIX-Variante:

grep "\(^\|[^ ]\)\ \([^ ]\|$)" a.txt 

Angenommen, Sie möchten Zeilen ausschließen, die mehr als ein benachbartes Leerzeichen enthalten Dies erfordert ausdrücklich, dass es ein Leerzeichen gibt, dem kein Leerzeichen vorangestellt ist und dem kein Leerzeichen folgt.

Es ist auch erwähnenswert, dass nicht alle Versionen von grep die Steuerelemente für reguläre Ausdrücke unterstützen.

Kommentare

  • Sie können alle diese Backslashes aus dem letzten Beispiel weglassen und die Lesbarkeit verbessern, indem Sie die von POSIX angegebene Option -E verwenden, mit der erweiterte reguläre Ausdrücke aktiviert werden. grep -E '(^|[^ ]) ([^ ]|$)' a.txt In jedem Fall wird der Backslash vor dem Leerzeichen nicht ' benötigt und ' fehlt vor der endgültigen schließenden Klammer. Für Versionen von grep, die \s verstehen, können Sie den Ausdruck für Nicht-Leerzeichen [^\s] bis \S
  • Dies funktioniert jedoch auch, [[: blank:]]

Antwort

Ich glaube, ich habe es gefunden:

grep "\+[[:space:]]\+" a.xml 

Antwort

Variante 2 findet nur zwei Leerzeichen. Wenn Sie "\s" Stattdessen funktionieren beide Varianten.

Sie können dies problemlos selbst testen. Was ist also Ihre eigentliche Frage?

Kommentare

  • Warum nur zwei Leerzeichen finden? Ich denke, es passt zu jedem Leerzeichen.
  • @Gnouc: Variante 2, während er es schreibt '\s ' stimmt mit mindestens zwei Leerzeichen in einer Reihe überein, da er ein Leerzeichen hinzugefügt hat Zeichen nach der Zeichengruppe \s.
  • Sie ' haben Recht, ich habe sehe das Leerzeichen nach \s, meinem Fehler.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.