So finden Sie einen Platz in einem Text. grep benutzen?

13

Wie grep ein Leerzeichen im Text?

cat a.txt| grep ' '

oder

cat a.txt| grep '\s '
Emax
quelle
7
Kostenlose Verwendung catin beiden Fällen. Das erste könnte geschrieben grep ' ' a.txt, das zweite ähnlich geändert werden.
MadHatter
1
Beachten Sie, dass \sauch Tabulator, Return, vertikaler Tabulator, Formularvorschub und technisch gesehen Zeilenumbruch übereinstimmen. Wenn Sie nur Speicherplatz und Tabulator zuordnen möchten, verwenden Sie [[:blank:]]oder [ \t].
Bis auf weiteres angehalten.
Mit gnu grep können Sie die Anzahl der Übereinstimmungen ( -mOption) auf eins beschränken ...
sendmoreinfo
Dies ist einfacher egrep "\ s" a.txt

Antworten:

6

Wenn Sie bei der Eingabe Ihrer Frage nur ein Leerzeichen eingeben möchten, 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, setzt dies explizit voraus, dass es ein Leerzeichen gibt, dem kein Leerzeichen vorangeht und auf das kein Leerzeichen folgt.

Beachten Sie außerdem, dass nicht alle Versionen von grep die Steuerelemente für reguläre Ausdrücke unterstützen.


quelle
1
Sie können alle diese umgekehrten Schrägstriche im letzten Beispiel weglassen und die Lesbarkeit verbessern, indem Sie die von POSIX angegebene -EOption verwenden, die erweiterte reguläre Ausdrücke aktiviert. grep -E '(^|[^ ]) ([^ ]|$)' a.txtIn jedem Fall wird der Backslash vor dem Leerzeichen nicht benötigt und es fehlt einer vor der letzten schließenden Klammer. Für Versionen grep, die dies verstehen \s, können Sie den Ausdruck für Nicht-Leerzeichen auch [^\s]auf\S
Angehalten bis auf weiteres kürzen.
Dies funktioniert jedoch auch, [[: blank:]]
Emax
4

Ich glaube ich habe es gefunden:

grep  "\+[[:space:]]\+" a.xml
Emax
quelle
1

Variante 2 findet nur zwei Leerzeichen. Wenn Sie '\s'stattdessen verwenden, funktionieren beide Varianten.

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

Sven
quelle
1
Warum nur zwei Leerzeichen finden? Ich denke, es passt zu jedem Raum.
Cuonglm
1
@Gnouc: Variante 2 entspricht beim Schreiben '\s 'mindestens zwei Leerzeichen hintereinander, da er nach der Zeichengruppe ein Leerzeichen eingefügt hat \s.
Sven
Du hast recht, ich sehe den Raum danach nicht \s, mein Fehler.
Cuonglm