Drucken Sie alle Zeilen, die keine Interpunktion enthalten


8

Ich möchte ein Regex-Muster, das alle Zeilen drucken kann, die keine Interpunktion enthalten:

Eingabe:

.This is line 1
This is ! line 2
This is line (3)
This is line 4

Ausgabe: (sollte sein)

This is line 4

Was ich bisher versucht habe:

grep '[^[:punct:]]' file.txt

Es werden jedoch alle Zeichen angezeigt, bei denen es sich nicht um Interpunktion handelt.

Antworten:


11

Sie grepdrucken alle Zeilen, die keine Satzzeichen enthalten. Dies ist nicht dasselbe wie das Drucken aller Zeilen, die keine Satzzeichen enthalten.

Für letzteres möchten Sie den -vSchalter (Druckzeilen, die nicht zum Muster passen):

grep -v '[[:punct:]]' file.txt

Wenn Sie den -vSchalter aus irgendeinem Grund nicht verwenden möchten , müssen Sie sicherstellen, dass die gesamte Zeile aus Zeichen ohne Satzzeichen besteht:

grep '^[^[:punct:]]\+$' file.txt

+1 danke. Gibt es eine Möglichkeit ohne -vSchalter?
Hamed Kamrava

@HamedKamrava Ja. Bitte sehen Sie meine Bearbeitung.
Joseph R.

@HamedKamrava Aus Neugier: Warum sollten Sie vermeiden -v?
Bernhard

Ich vermeide es nicht, -veinfach mehr wissen zu wollen :)
Hamed Kamrava

@HamedKamrava Bitte vergessen Sie nicht, diese Antwort als "Akzeptiert" zu markieren, wenn sie Ihr Problem gelöst hat.
Joseph R.

1

In sed können Sie Folgendes tun:

sed '/[[:punct:]]/!d'

In awk können Sie tun:

awk '!/[[:punct:]]/'


1

Eine Perl:

perl -nle 'print unless /\p{XPosixPunct}/' file

Dies entspricht -! "# $% & '() * + ,. /:; <=> ? @ [\] ^ _` {|} ~ Welche Unicode-Punkte und -Symbole berücksichtigen.

oder:

perl -nle 'print unless /\p{Punct}/' file

\p{Punct}stimmt nur mit -! "#% & '() * ,. /:;? @ [\] _ {} überein , wobei $ + <=> ^` | ~ fehlen, wobei Unicode Symbole berücksichtigt.

perlVerwenden Sie standardmäßig das Gebietsschema POSIX. Wenn Sie nicht verwenden perl, sollten Sie alle so einstellen LC_ALL=POSIX, da unterschiedliche Gebietsschemas unterschiedliche Satzzeichen haben können, wie dies der Fall SAA Cist ¢.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.