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
grepimplementaciones 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'awkel 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
sedsolució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 elexprtenedor?bashsolución pura . Pero tenga en cuenta que a menos que se quedeIFS=delanteread, se ignorarán los espacios iniciales.$linepor lo que no es necesario restar una.readun nombre para leer, leeráREPLYe incluirá todos los espacios en blanco. NoIFSse necesita configuración.while readlos 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
-llínea de comando,perlcontará 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