Imprimer toutes les lignes ne contenant pas de ponctuation

8

Je veux un motif regex qui peut imprimer toutes les lignes qui ne contiennent pas de ponctuation:

Contribution :

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

Sortie: (devrait être)

This is line 4

Ce que j'ai essayé jusqu'à présent:

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

Mais il montre tous les caractères qui ne sont pas des signes de ponctuation.

Hamed Kamrava
la source

Réponses:

11

Votre grepimprime toutes les lignes contenant des caractères non ponctués. Ce n'est pas la même chose que d'imprimer toutes les lignes qui ne contiennent pas de caractères de ponctuation.

Pour ce dernier, vous voulez le -vcommutateur (lignes d'impression qui ne correspondent pas au motif):

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

Si, pour une raison quelconque, vous ne souhaitez pas utiliser le -vcommutateur, vous devez vous assurer que la ligne entière est constituée de caractères non ponctués:

grep '^[^[:punct:]]\+$' file.txt
Joseph R.
la source
+1 merci. Existe-t-il un moyen sans utiliser d' -vinterrupteur?
Hamed Kamrava
@HamedKamrava Oui. Veuillez voir ma modification.
Joseph R.
@HamedKamrava Par curiosité: pourquoi voudriez-vous éviter -v?
Bernhard
Je n'évite pas -vjuste de vouloir en savoir plus :)
Hamed Kamrava
@HamedKamrava N'oubliez pas de marquer cette réponse comme «acceptée» si elle a résolu votre problème.
Joseph R.
1

Dans sed, vous pouvez faire quelque chose comme:

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

Dans awk, vous pouvez faire:

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

ryekayo
la source
1

Un Perl:

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

Cela correspondra à -! "# $% & '() * +,. / :; <=> ? @ [\] ^ _` {|} ~ Dont l'unicode considère la ponctuation et les symboles.

ou:

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

\p{Punct}ne correspond qu'à -! "#% & '() *,. /:;? @ [\] _ {} , il manque $ + <=> ^` | ~ que l'unicode considère comme des symboles.

perlpar défaut, utilisez les paramètres régionaux POSIX. Si vous n'utilisez pas perl, vous devez tous le définir LC_ALL=POSIX, car différents paramètres régionaux peuvent avoir des caractères de ponctuation différents comme SAA Chas ¢.

cuonglm
la source