Imprime todas las líneas que no contienen puntuación


8

Quiero un patrón regex que pueda imprimir todas las líneas que no contengan puntuación:

Entrada:

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

Salida: (debería ser)

This is line 4

Lo que he probado hasta ahora:

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

Pero muestra todos los caracteres que no son signos de puntuación.

Respuestas:


11

Sus grepimpresiones de todas las líneas que contienen caracteres que no sean de puntuación. Eso no es lo mismo que imprimir todas las líneas que no contienen caracteres de puntuación.

Para este último, desea el -vinterruptor (líneas de impresión que no coinciden con el patrón):

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

Si, por alguna razón, no desea utilizar el -vinterruptor, debe asegurarse de que toda la línea consta de caracteres que no sean de puntuación:

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

+1 gracias. ¿Hay alguna manera sin usar el -vinterruptor?
Hamed Kamrava

@HamedKamrava Sí. Por favor vea mi edición.
Joseph R.

@HamedKamrava Por curiosidad: ¿por qué querrías evitarlo -v?
Bernhard

No evito -vsolo quiero saber más :)
Hamed Kamrava

@HamedKamrava Por favor, no olvide marcar esta respuesta como 'Aceptada' si resuelve su problema.
Joseph R.

1

En sed puedes hacer algo como:

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

En awk puedes hacer:

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


1

A Perlunos:

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

Esto coincidirá con -! "# $% & '() * +,. / :; <=> ? @ [\] ^ _` {|} ~ Que Unicode considera signos de puntuación y símbolos.

o:

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

\p{Punct}solo coincide con -! "#% & '() *,. /:;? @ [\] _ {} , falta $ + <=> ^` | ~ que Unicode considera Símbolos.

perlde forma predeterminada, use el entorno local POSIX. Si no lo usa perl, debería configurarlo todo LC_ALL=POSIX, ya que una configuración regional diferente puede tener caracteres de puntuación diferentes como SAA Ctiene ¢.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.