¿Cómo excluyo las líneas muy largas de grep
los 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 grep
para 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 grep
a algo no necesariamente eliminará los colores. Ese comportamiento es el resultado de --color=auto
(que, si marca, alias grep
probablemente sea lo que esté usando). Puede anularlo y pasarlo --color=always
y grep
conservará 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, cut
como 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 grep
invocació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=always
bandera 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.