Gostaria de encontrar linhas no meu código que excedam um determinado comprimento. Meu código está em vários arquivos. Qual é uma boa maneira de fazer isso?
Eu gostaria de saber os arquivos e números de linha; o conteúdo seria preferido, mas não necessário. O objetivo do exercício é descobrir como quebrar as linhas (provavelmente manualmente).
text-processing
Marcin
fonte
fonte
grep
), ou como números de linha, ou como outra coisa (talvez você queira aplicar outra ação sobre elas)? Provavelmente, a maneira mais conveniente de fazer isso depende do que será feito com essas linhas a seguir.Respostas:
Com
grep
:Para linhas com pelo menos 12 caracteres.
Com vários arquivos:
Algumas
grep
implementações, como o GNUgrep
, podem fazer a busca por arquivos.Mas cuidado com links simbólicos e outros arquivos não regulares.
fonte
Solução AWK
Ou, mais concisamente:
fonte
awk 'length > 5'
awk 'length > 5'
awk
a um pouco menos elegante, mas concisaawk '/^.{6,}/'
awk '/.{6}/'
(na verdade, o GNU awk até recentemente costumava ser aquele em que isso não funcionaria, a menos que você passasse POSIXLY_CORRECT para o ambiente).Uma vez que faltava uma
sed
soluçãofonte
Solução Bash
Então, por exemplo
./whatever.sh < input.file
. Isso não inclui a nova linha subtraindo 1 de$len
; se isso não for desejável, ou se sua entrada usa terminações CRLF, você deve ajustar em conformidade.fonte
${#line}
evitar oexpr
garfo?bash
solução pura . Mas observe que, a menos que você fiqueIFS=
na frenteread
, os espaços à esquerda serão ignorados.$line
portanto, não é necessário subtrair uma.read
um nome para ler, ele leráREPLY
e incluirá todo o espaço em branco. NenhumaIFS
configuração é necessária.while read
loops para processar texto são realmente uma prática ruim.Com
perl
(por exemplo), supondo que você esteja pesquisando linhas com mais de 80 caracteres:Para exibir as linhas:
Para exibir o número das linhas:
Ou ambos:
fonte
-l
linha de comando,perl
contará a quebra de linha em suas linhas.Ruby:
Pitão :
fonte
Aqui está outra solução do bash (bash 4):
A matriz resultante é escassa, portanto, os índices da matriz são mantidos. Desde que começamos com 1, os índices são os números das linhas que mantemos. Podemos gerar apenas esses números de linha:
Ou podemos produzir as próprias linhas:
fonte