¿Cómo "grep" para la longitud de línea * no * en un rango dado?

17

NOTA: Esta pregunta es el complemento de estas preguntas y respuestas: ¿Cómo "grep" para la longitud de línea en un rango dado?


¿Cómo podemos buscar líneas que tengan menos de 8 o más de 63 caracteres, ninguna que contenga más de ocho y menos de 63 caracteres?

Entonces, algunos recuentos de caracteres aceptables podrían ser ...

7 6 5 4 3 2 1 0

...y...

64 65 66 67 ...
LoukiosValentine79
fuente
3
Sé que lo solicita grep, pero puede considerarlo awk, especialmente si necesita más procesamiento, etc. (muy flexible y legible ): awk '( length($0)<8 ) || ( length($0)>63 )' # la acción predeterminada de una condición es imprimir las líneas que coinciden con la condición. O, con menos procesamiento en $ 0:awk '{ l=length($0) ; if (( l<8 ) || l>63 ) { print $0 ;} }'
Olivier Dulac
@mikeserv: sí, al mirar esto de nuevo, probablemente tenga más sentido acercarse a este Q&A como el dup.
slm
@mikeserv: generalmente es una molestia, tengo que fusionar las respuestas en una de las Q y luego se eliminan del original. Esta es la guía para hacerlo: "Las preguntas deben fusionarse cuando son 99% idénticas y sería beneficioso tener todas las respuestas de múltiples preguntas duplicadas en un solo lugar. Esto elimina las respuestas, las mueve a la pregunta objetivo y se va la pregunta actual como un trozo con un enlace a su objetivo de fusión ".
slm
que paso con mi comentario
Dmitry Grigoryev
@DmitryGrigoryev: supongo que a alguien no le gustó. tómalo de alguien que ha estado allí, olvídalo.
mikeserv

Respuestas:

38
grep -xv '.\{8,63\}' <input >output

grepEl -xinterruptor 'denota una coincidencia de línea completa , lo que significa que cualquier patrón coincidente debe definir una línea desde la cabeza hasta la cola. haciendo...

grep -x pattern

... es generalmente equivalente a ...

grep ^pattern$

grepEl -vconmutador niega la influencia de un patrón en la selección de línea. generalmente haciendo ...

grep pattern

... solo seleccionará líneas que coincidan con el patrón, pero con un -vpatrón negado solo se seleccionarán aquellas líneas que no coincidan.

...y entonces...

grep -xv '.\{8,63\}'

... coincide con todas las líneas que consisten de la cabeza a la cola de entre 8 y 63 caracteres, y la -vselección negada grepsolo hace que se imprima todo lo demás.

mikeserv
fuente