cat- alguns exemplos de uso e linha de comando

Atualizado em: 16/09/2006



Sobre este documento

linhas de comando e scripts com uso do cat na edição de arquivos textos ou dados passados pelo pipe |.

cat, dicas e help

cat - concatena arquivo e lista o resultado na saída padrão

o cat vem no pacote coreutils, para instalar na maioria das distro instale o pacote: coreutils

o cat é muito utilizado para exibir conteúdo de arquivos.

  cat arquivo.txt
  
  Arquivos de configuração do sistema.
  
  cat /etc/fstab
  cat /proc/cpuinfo
  cat /proc/meminfo

Exemplo para varrer todo o arquivo de log do squid pra localizar as ocorrencias da palavra correio:

cat /var/log/squid/access.log | grep correio

Existem outras opções, como o comando tail, o exemplo acima demonstra o uso do cat com "|" (pipe) passando o resultado do cat para o grep filtrar.

Para exibir contéudo de textos veja também os recursos de:

  less = man less
  more = man more

Manual do comando cat:

cat - concatena arquivo e lista o resultado na saída padrão

  man cat
  info cat
  cat --help

Algumas sugestões de pesquisa no Google:

  Re: cat ~linux
  cat ~linux
  how to cat ~linux
  define:cat

exibir caracteres de controles e especiais em arquivos

Parte do man do CL 10

         -v, --show-nonprinting
                Mostra  os caracteres de controle exceto para LDF e TAB usando a
                notação `^' e precedendo os caracteres que têm o mais  alto  bit
                configurado com `M-'.
  
         -A, --show-all
                Equivalente a -vET.
  
         -E, --show-ends
                Lista um `$' ao final de cada linha.
  
         -T, --show-tabs
                Lista os caracteres TAB como `^I'.

Exibir caracteres de controle no arquivo; como final de linha ENTER cifrão ($) do final de linha, -t da tecla TAB, ^I das teclas CTRL+LETRA como (^LETRA).

  cat -vet arquivo.txt
  cat -vET arquivo.txt

cat -A arquivo.txt

-A tem o mesmo resultado de -vET, veja no man cat

         -A, --show-all
                equivalent to -vET

cat exemplos de linha de comando

Alguns exemplos de comando e comparativos...

Mostrar o conteúdo do arquivo

cat cp.txt

Mosgtrar o conteúdo de todos arquivos .txt do diretório corrrente

cat *.txt

Somente dos arquivos que iniciam com manu*

cat manu*

Mostrar o conteúdo do arquivo com pausas na tela (more)

cat cp.txt | more

Mostrar o conteúdo do arquivo com pausas na tela (less)

cat cp.txt | less

Com linhas numeradas (somente na exibição), mostrar o conteúdo do arquivo com a numeração das linhas, inclusive as linhas em branco.

cat -n cp.txt | more

Ou o mesmo resultado com less:

less -N cp.txt

Numerar as linhas do resultado de ls

ls | cat -n ou

cat -n <(ls)

Salvar o resultado de ls em arquivo com linhas numeradas.

cat -n <(ls) > lsnumerado

Com detalhes, ls -la

cat -n <(ls -la) > lsnumerado ou

ls -la | cat -n > lsnumerado

com o comando find.

find /home/zago/guiaz | cat -n

Com linhas numeradas excluidas as linhas em branco

cat -b cp.txt | more

Exibir cararectes de controle, final de linha e etc..

cat -A cp.txt

Obtendo informações do sistema

Obtendo informações sobre sua máquina:

Para obter informações como IRQs, I/O Address, DMA etc, execute os seguintes comandos:

  cat /proc/cpuinfo
  cat /proc/meminfo
  
  qual irq o device pci esta usando
  
  cat /proc/pci
  
  Ver quais irqs, DMA, e portas de i/o estão sendo usados: 
  
  cat /proc/interrupts
  cat /proc/dma
  cat /proc/ioports
  
  cat /proc/pci

Veja também as outras informações disponíveis no /proc.

cat + grep pra filtrar resultados, exemplos:

cat /proc/meminfo | grep -i memtotal

cat /proc/cpuinfo | grep -i mhz

Obtendo varias informações:

cat /proc/cpuinfo | grep "model\|cpu\|processor"

cat /proc/cpuinfo | grep "model\|cpu\|processor\|MHz "

cat editor de texto

Parte do man do CL10

         -b, --number-nonblank
                Numerar  todas  as  linhas  de  saída diferentes de espaços, que
                comecem com 1.
  
         -e     Equivalente a -vE.
  
         -n, --number
                Numera todas as linhas de saída, começando com 1.
  
         -s, --squeeze-blank
                Substitui todas as linhas adjacentes com espaços com  uma  única
                linha em branco.

Quando omitido o destino o resultado vai para saída padrão (console) não afeta o arquivo de origem, nem tem opção para alterar o próprio arquivo, quando precisa salvar o resultado, use redirecionadores (>) ou (>>).

Podemos redirecionar a saida para arquivo, como exemplo, remover linhas em branco repetidas e salvar o resultado em outro arquivo.

cat -s arquivo.txt > arqlimpo.txt

Aplicar os demais exemplos indicados no help, faça a troca de -s pela opção desejada.

cat não chega a ser um editor, da maneira como conhecemos, mas você pode gerar arquivos texto com ele, semelhante ao copy con do DOS.

Digite

cat > arquivo.txt

O cursor fica esperando você digitar algo. Tudo o que você digitar será inserido no arquivo.txt. Para finalizar a inserção de texto, digite CTRL+D.

Se quiser acrescentar algo ao final deste arquivo, digite

cat >> arquivo.txt

cat > nomedoarquivo moverá o cursor para a linha seguinte, escreva a linha, enter finaliza a linha e passar para linha seguinte, para finalizar o arquivo, salvar e sair, tecle enter e depois CTRL d (^d), no CL9 a única tecla de correção que encontrei foi a tecla BACKSPACE (retrocesso) para voltar e apagar caracteres na mesma linha.

Criar arquivos (scripts).

na linha de comando digite cat > nomedoarquivo, depois continue digitando os comandos, pra encerrar, salvar e sair, pressione CTRL+D simultaneamente, faça um teste com o exemplo abaixo, digite na linha de comando:

  cat > testcat
  #!/bin/bash
  #coloque os comandos aqui, por exemplo:
  echo "neste exemplo executa um ls -la e exibe a data"
  ls -la
  date

quando terminar a digitação, pressione a tecla enter pra encerrar a linha depois simultaneamente as teclas CTRL D, pra salvar e sair, pra tornar o script executável:

chmod 0700 testcat

Pra executar o script:

./testcat

Desta maneira funciona no CL, alguns tutoriais indicam o uso de CTRL+Z, comigo deu problema, prefira CTRL+D.

Outro exemplo:

  [root@faqcl10 zago]# cat >> testcat <<EOF
  > #!/bin/bash
  > #coloque os comandos aqui, por exemplo:
  > echo "neste exemplo executa um ls -la e exibe a data"
  > ls -la
  > date
  > EOF
  [root@faqcl10 zago]#

Pra encerrar a digitação, salvar e sair, digite EOF em maiusculas.

No primeiro exemplo com cat > testcat não funciona, no segundo exemplo o cursor fica com sinal ">", neste caso é só digitar EOF pra salvar e sair.

O exemplo acima trabalha no modo interativo, no exemplo abaixo sem interação e ideal para uar dentro de scripts, facilita muito na criação de arquivos de configuração, como exemplo, para criar o arquivo /etc/squid/direto.txt contendo duas linhas (.gov.br e www.zago.eti.br).

  cat <<EOF > /etc/squid/direto.txt
  .gov.br
  www.zago.eti.br
  EOF

Notei que tem uma limitação em 127 linhas, caso seu texto tenha mais que isto, pode criar varios arquivos e juntar com cat arquivo >> arqdestino.

redirecionar o resultado do terminal para um arquivo

Quando omitido o destino, o resultado será exibido no terminal, para redirecionar o resultado para outro arquivo utilize os redirecionadores ">", com um redirecionador cria o novo arquivo, caso já exista o seu conteúdo anterior será apagado, para acrescentar novos dados utilize dois redirecionadores ">>".

Neste documento tem alguns exemplos para numerar linhas do arquivo, este efeito ocorre somente na tela e não afeta o arquivo, para numerar as linhas e salvar as mudanças em arquivo, precisa redirecionar a saida para outro arquivo, acrescente no final da linha de comando:

> arqnumerado

Ex com o cat:

cat -n comandos.txt > comandosnum.txt

Exemplo com o caminho onde deseja salvar:

cat -n comandos.txt > /home/usuario/meusdoc/comandosnum.txt

Listar as linhas numeradas contendo somente as ocorrencias de determinada palavra, facilita a localização pelo editor de texto, exemplo para listar somente as linhas que contém myhost no main.cf

cat -n /etc/postfix/main.cf | grep myhost

Este exemplo de redirecionar a saida se aplica a qualquer resultado de outros comandos que enviam o resultado para tela.

Numerar linhas recebidas pelo "|" pipe.

Descobrir quais as linhas do manual sobre o tar contém zip, veja que exibe as linhas numeradas, depois é só executar o man tar e ir direto na linha desejada.

man tar | cat -n | grep -i zip

  [zago@faqcl9 zago]$ man tar | cat -n | grep -i zip
      26         --exclude-from ARQUIVO ] [ -Z, --compress, --uncompress ] [ -z, --gzip,
      27         --ungzip      ] [ --use-compress-program PROG ] [ --block-compress ]  [
     209         -z, --gzip, --ungzip
     210                filtra os arquivos através de gzip

cat - exemplos de uso com outros aplicativos

cat + grep aplicando filtros.

Esta dupla é muito utilizada em pesquisas por palavras em arquivos, para salvar o resultado em arquivo acrescente > mais o nome do arquivo. Segue alguns exemplos de comando.

Exibir arquivos de configuração sem as linhas comentadas (linha com # no inicio)

cat /etc/dhcpd.conf | grep -v \#

cat /etc/apache2/httpd.conf | grep -v \#

Salvar resultado em arquivo.

cat + split (dividir e juntar arquivos)

Juntar arquivos

Pegar dois arquivos texto para criar um terceiro, exemplo para junar a + b, criar c contendo a+b.

cat a b > c

Também pode dividir em varios comandos, o resultado abaixo é o mesmo do comando acima:

cat a > c cab b >> c

lembre que para acrescentar algo em arquivo já existente precisa usar dois redirecionadores para não apagar o que já existe, com um redirecionador ">" cria novo arquivo e perde o conteúdo pre-existente, com dois ">>" acrescenta o resultado do comando cat no final do arquivo destino, para acrescentar no inicio ou corpo do texto utilize ferramentas como tac, sed, awk ou outra mais apropriada.

Usando o cat para remontar aquivos divididos pelo split.

O comando split divide o arquivo em pedados, por default nomeia os pedaços no formato: xaa xab xac xad xae xaf e assim por diante até xzz, para remontar o arquivo, use o cat neste formato:

cat xaa xab xac xad xae xaf > arquivo_remontado

Simplificando:

cat xa[a-f] > arquivo_remontado

onde: [a-f] identifica o primeiro e ultimo pedaço, o primeiro pedaço deverá ser sempre idendificado por "a", neste exemplo a letra "f" identifica o ultimo pedaço "xaf", na tua linha de comando substitua o "f" pela letra que identifica o ultimo pedaço, tente com todo alfabeto [a-z]:

cat xa[a-z] > arquivo_remontado

Mantenha a ordem dos pedaços na remotagem, no arquivo novo são acrescentados um após o outro e no final do arquivo, siga sempre a regra:

cat part1 part2 part3 part4 > arquivoremontado

cat arquivo1 arquivo2 > arquivo3

sobre uso do split e exemplos de comando, veja FAQ.
http://www.zago.eti.br/split.txt

tac - inverter a ordem das linhas

man tac

tac - concatenate and print files in reverse

tac é um cat ao contrário, inverte a ordem, imprime do fim para o inicio do arquivo, de traz para frente.

a primeira linha vai para o lugar da ultima e vice-versa.

cat + tee redirecionar e visualizar

Redirecionar o resultado para arquivo e visualizar ao mesmo tempo no cosole.

tee

man tee

tee - lê da entrada padrão e grava na saída padrão

tee vem no pacote coreutils.

# rpm -qf /usr/bin/tee coreutils-5.2.1-62747cl

Exemplo para listar na tela e salvar o mesmo resultado em arquivo, listar tudo que foi acessado nas ultimas 24 horas no diretório /home/zago e também salvar o mesmo resultado em acessadosz.txt

find /home/zago -mtime -1 -type f | tee acessadosz.txt

Ver o conteudo de comandos.txt e salvar em comandosnum.txt o mesmo resultado que exibe na tela.

cat -n comandos.txt | tee comandosnum.txt

Outros pacotes semelhantes ao cat

less

less é similar ao more, útil pra exibir conteúdo de arquivos texto, ele é chamado pelo man pra exibir as páginas do manual no formato:

less -is <pagina>

pra sair do man pressione "q" minusculo

q

Pode usar com ou sem formato "is" para ler qualquer texto, exemplo,

less cp.txt

less -is cp.txt

Ou informando o caminho do documento:

less -is /home/zago/guiaz/cp.txt

Numerar linhas:

less -N cp.txt

Tem muitas opções de uso, veja no manual:

man less

Para instalar procure pelo pacote: less

more

more - filtro para uso na visualização de arquivos em terminais

more <docmento-texto>

more comandos.txt

more /home/zago/guiaz/comandos.txt

Barra de espaço salta página, SHIFT + PageUp ou PageDown para voltar ou avançar telas.

Veja as páginas do more:

man more

Para instalar procure no pacote: util-linux

nl Numerando linhas com "nl"

nl arquivo.txt

nl arquivo.txt > arqnumerado.txt

Tem diversas opções, veja mais sobre nl

    info coreutils nl
    man nl
    info nl
    nl --help

echo passando arquivo para stdout

echo mostrando arquivo como se faz com cat arquivo

echo "$(<arquivo.txt)"

echo "$(</tmp/guiaz/comandos.txt)"

Não entendi, na minha instalação SUSE 10.1, a falta do sinal (<) retorna o conteúdo do bash_history do usuário, mesmo informando o caminho e arquivo existente, e mesmo quando executado fora do home, a falta do < retorna o mesmo resultado de:

cat ~/.bash_history

Indicações

cat - FAQ com mensagens da Linux-br
http://www.zago.eti.br/script/cat.txt

Página principal sobre script em geral (FAQ)
http://www.zago.eti.br/script/A-menu-scripts.html

Página principal deste site (FAQ)
http://www.zago.eti.br/menu.html