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 werdengrep ' ' 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 vongrep
, 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.