Como encontrar o conteúdo de um arquivo?

0

Como exibo conteúdo de arquivos com nome contendo a letra 'a'? eu tentei cat|ls|grep 'a'

    
por jimmy ray 25.01.2018 / 20:57

5 respostas

4

Isso deve funcionar:

find . -type f -name '*a*' -exec cat {} \;
    
por 25.01.2018 / 21:11
2

O pager less tem um recurso que permite navegar por vários arquivos e saltar entre eles, portanto, se todos os arquivos estiverem no mesmo diretório, less *a* abrirá inicialmente o primeiro e você poderá, a qualquer momento, avançar para o próximo arquivo digitando :n ou retornando ao arquivo anterior digitando :p . Digitar = a qualquer momento exibirá o nome do arquivo atual. O pager less tem muitos outros recursos úteis, documentados e ainda não utilizados. A partir do programa, digite h para uma folha de dicas longa com várias páginas.

find -type f -maxdepth 1 -name '*a*' -exec less '{}' +
    
por 25.01.2018 / 23:14
1

Se todos os arquivos estiverem localizados no mesmo diretório, esta versão curta fará isso:

cat *a*

No caso de nomes de arquivos engraçados começando com '-' a './' deve ser prefixo:

cat ./*a*

Os diretórios com a resultarão em uma mensagem de erro não prejudicial.

    
por 25.01.2018 / 22:07
0

Se os arquivos estiverem localizados em um diretório, você poderá usar

para i em * a *; do (echo $ i & cat; i & & echo ""); feito

para mostrar todos os arquivos. No entanto, você ainda é capaz de lembrar qual saída vem de qual arquivo e há uma separação da saída do arquivo individual.

    
por 26.01.2018 / 09:39
0

Para exibir o conteúdo de todos os arquivos regulares no diretório atual cujo nome contém o caractere a :

find . ! -name . -prune -name '*a*' -type f -exec cat {} +

Embora com várias implementações find (incluindo a GNU one no seu Ubuntu), isso excluiria arquivos cujo nome contenha seqüências de bytes que não formam caracteres válidos na localidade atual.

Com algumas implementações de find , você pode usar -depth 1 em vez do padrão ! -name . -prune . Alguns outros (como o GNU find ) têm -mindepth 1 -maxdepth 1 (embora -maxdepth 1 seja suficiente aqui, pois a profundidade 0 é . , o que é excluído tanto pelo -type f como pelo -name '*a*' ).

O problema de caractere inválido pode ser aliviado usando zsh e:

cat ./*a*(D.)

O que também teria o benefício de relatar um erro se não houver um arquivo correspondente e a classificação da lista de arquivos para que a saída seja menos aleatória.

Se você também quiser incluir links simbólicos em arquivos regulares, adicione uma opção -L a find ou - no qualificador zsh glob.

Se você quiser excluir arquivos ocultos, adicione um ! -name '.*' a find ou remova o D do qualificador glob do zsh.

Observe que cat concatena esses arquivos. Se a1 contiver foo sem um caractere de nova linha à direita (o que não aconteceria se a1 fosse um arquivo de texto adequado) e a2 continha bar , a saída seria foobar .

Para incluir os nomes dos arquivos, você pode usar grep '^' /dev/null em vez de cat , o que deve preceder cada linha com o nome do arquivo. Ou grep -n '^' /dev/null também inclui números de linha.

Com a implementação GNU de head (como encontrado no seu Ubuntu), você pode usar head -vc-0 que adicionaria um

===> ./file_with_a <===

cabeçalho e uma linha vazia entre cada arquivo.

    
por 26.01.2018 / 11:02