Me gustaría encontrar líneas en mi código que excedan una cierta longitud. Mi código está en múltiples archivos. ¿Cuál es una buena manera de hacer esto?
Me gustaría saber los archivos y los números de línea; el contenido sería preferido, pero no necesario. El propósito del ejercicio es descubrir cómo romper las líneas (probablemente de forma manual).
text-processing
Marcin
fuente
fuente
grep
), o como números de línea, o como algo más (tal vez desee aplicar otra acción sobre ellas)? Probablemente, la forma más conveniente de hacerlo depende de lo que se haga con estas líneas a continuación.Respuestas:
Con
grep
:Para líneas de al menos 12 caracteres de longitud.
Con varios archivos:
Algunas
grep
implementaciones como GNUgrep
, pueden hacer la búsqueda de archivos ellos mismos.Pero tenga cuidado con los enlaces simbólicos y otros archivos no regulares.
fuente
Solución AWK
O, más concisamente:
fuente
awk 'length > 5'
awk 'length > 5'
awk
el algo menos elegante pero concisoawk '/^.{6,}/'
awk '/.{6}/'
(en realidad GNU awk hasta hace poco solía ser aquel en el que eso no funcionaría a menos que pase POSIXLY_CORRECT a su entorno).Como lo único que faltaba era una
sed
soluciónfuente
Solución bash
Así, por ejemplo,
./whatever.sh < input.file
. Esto no incluye la nueva línea restando 1 de$len
; Si eso no es deseable, o si su entrada utiliza terminaciones CRLF, debe ajustar en consecuencia.fuente
${#line}
evitar elexpr
tenedor?bash
solución pura . Pero tenga en cuenta que a menos que se quedeIFS=
delanteread
, se ignorarán los espacios iniciales.$line
por lo que no es necesario restar una.read
un nombre para leer, leeráREPLY
e incluirá todos los espacios en blanco. NoIFS
se necesita configuración.while read
los bucles para procesar texto son realmente una mala práctica.Con
perl
(por ejemplo), suponiendo que está buscando líneas de más de 80 caracteres:Para mostrar las líneas:
Para mostrar el número de líneas:
O ambos:
fuente
-l
línea de comando,perl
contará el salto de línea en sus líneas.Rubí:
Python:
fuente
Aquí hay otra solución bash (bash 4):
La matriz resultante es escasa, por lo que se mantienen los índices de la matriz. Desde que comenzamos en 1, los índices son los números de línea de las líneas que guardamos. Podemos generar solo esos números de línea:
O podemos generar las líneas en sí mismas:
fuente