Excluir líneas largas de los resultados de grep

Excluir líneas largas de los resultados de grep

¿Cómo excluyo las líneas muy largas de greplos resultados?

A menudo reviso muchos archivos .js ( -r) y algunos de ellos están compilados, por lo que constan de una sola línea, generalmente de un par de miles de caracteres. De todo ese desorden me cuesta ver los resultados del resto de archivos.

¿A qué debo pasar greppara excluir líneas que tengan, digamos, más de 1000 caracteres?

Preferiría no tener que canalizar el resultado a través de otro grep, ya que eso me haría perder colores de la salida, o tener que agregar nuevamente el primer grep al final del canal para recuperar los colores.

Respuesta1

Colocarle un ribete grepa algo no necesariamente eliminará los colores. Ese comportamiento es el resultado de --color=auto(que, si marca, alias grepprobablemente sea lo que esté usando). Puede anularlo y pasarlo --color=alwaysy grepconservará los colores incluso a través de una tubería.

En cuanto a excluir las líneas, puede canalizarlas a cualquier herramienta que desee (por ejemplo, cutcomo mencionó Amazed). Tenga en cuenta que los colores de grep insertarán bytes adicionales en las líneas coincidentes, si eso le importa. No hay una forma obvia de hacerlo (al menos para mí) en la misma grepinvocación.

Respuesta2

El siguiente comando debería lograr lo que desea, es decir, no generar líneas coincidentes cuya longitud sea superior a 1000 caracteres:

grep -r --color=always $pattern . | cut -c1-1000

La --color=alwaysbandera garantiza que grep generará secuencias de escape de color.

El valor predeterminado de esta opción es --color=auto, lo que hace que grep coloree su salida solo si se pasa a una terminal interactiva y no usa colores cuando se canaliza a otro comando.

Fuente:https://unix.stackexchange.com/a/113507/48906

información relacionada