Stampa tutte le righe che non contengono punteggiatura


8

Voglio un modello regex in grado di stampare tutte le linee che non contengono punteggiatura:

Input:

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

Output: (dovrebbe essere)

This is line 4

Quello che ho provato finora:

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

Ma mostra tutti i personaggi che non sono punteggiatura.

Risposte:


11

Le vostre grepstampe tutte le linee che contengono caratteri non punteggiatura. Non è lo stesso che stampare tutte le linee che non contengono caratteri di punteggiatura.

Per quest'ultimo, si desidera l' -vinterruttore (linee di stampa che non corrispondono al modello):

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

Se, per qualche motivo, non si desidera utilizzare l' -vopzione, è necessario assicurarsi che l'intera riga sia composta da caratteri non di punteggiatura:

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

+1 grazie. Esiste un modo senza usare l' -vinterruttore?
Hamed Kamrava,

@HamedKamrava Sì. Si prega di vedere la mia modifica.
Joseph R.,

@HamedKamrava Per curiosità: perché dovresti evitare -v?
Bernhard,

Non evito -vsolo di volerne sapere di più :)
Hamed Kamrava,

@HamedKamrava Non dimenticare di contrassegnare questa risposta come "accettata" se il problema è stato risolto.
Joseph R.,

1

In sed puoi fare qualcosa del tipo:

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

In awk puoi fare:

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


1

A Perlquelli:

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

Questo corrisponderà -! "# $% & '() * +,. / :; <=> ? @ [\] ^ _` {|} ~ Che unicode considera Punteggiatura e Simboli.

o:

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

\p{Punct}corrisponde solo a -! "#% & '() *,. /:;? @ [\] _ {} , mancante $ + <=> ^` | ~ che gli Unicode considerano i Simboli.

perlper impostazione predefinita utilizzare le impostazioni internazionali POSIX. Se non lo usi perl, dovresti impostarlo tutti LC_ALL=POSIX, perché impostazioni locali diverse possono avere diversi caratteri di punteggiatura come SAA Cha ¢.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.