Je voudrais trouver des lignes dans mon code qui dépassent une certaine longueur. Mon code est dans plusieurs fichiers. Quelle est la bonne façon de procéder?
J'aimerais connaître les fichiers et les numéros de ligne; le contenu serait préféré, mais pas nécessaire. Le but de l'exercice est de comprendre ensuite comment briser les lignes (probablement manuellement).
text-processing
Marcin
la source
la source
grep
), ou en tant que numéros de ligne, ou comme autre chose (peut-être voulez-vous leur appliquer une autre action)? La façon la plus pratique de procéder dépend probablement de ce qui sera fait avec ces lignes ensuite.Réponses:
Avec
grep
:Pour les lignes d'au moins 12 caractères.
Avec plusieurs fichiers:
Certaines
grep
implémentations comme GNUgrep
peuvent faire elles-mêmes la recherche de fichiers.Mais méfiez-vous des liens symboliques et autres fichiers non réguliers.
la source
Solution AWK
Ou, plus concis:
la source
awk 'length > 5'
awk 'length > 5'
awk
le moins élégant mais concisawk '/^.{6,}/'
awk '/.{6}/'
(en fait, GNU awk jusqu'à récemment était celui où cela ne fonctionnerait pas à moins que vous ne passiez POSIXLY_CORRECT à son environnement).Puisque la seule chose qui manquait était une
sed
solutionla source
Bash solution
Ainsi, par exemple
./whatever.sh < input.file
. Cela n'inclut pas la nouvelle ligne en soustrayant 1 de$len
; si ce n'est pas souhaitable, ou si votre entrée utilise des terminaisons CRLF, vous devez ajuster en conséquence.la source
${#line}
pas éviter laexpr
fourche?bash
solution pure . Mais veuillez noter qu'à moins que vous ne restiezIFS=
devantread
, les espaces de tête seront ignorés.$line
donc pas besoin d'en soustraire une.read
nom à lire, il liraREPLY
et inclura tous les espaces. AucunIFS
réglage nécessaire.while read
les boucles pour traiter le texte sont de très mauvaises pratiques.Avec
perl
(par exemple), en supposant que vous recherchez des lignes de plus de 80 caractères:Pour afficher les lignes:
Pour afficher le numéro de ligne:
Ou les deux:
la source
-l
ligne de commande,perl
comptera le saut de ligne dans vos lignes.Rubis:
Python:
la source
Voici une autre solution bash (bash 4):
Le tableau résultant est rare, de sorte que les indices du tableau sont conservés. Depuis que nous avons commencé à 1, les indices sont les numéros de ligne des lignes que nous avons conservées. Nous pouvons sortir uniquement ces numéros de ligne:
Ou nous pouvons sortir les lignes elles-mêmes:
la source