O comando cat, do sistema operacional, Unix é usado para unir, criar e exibir arquivos.[1][2] O nome remete a "concatenate" ("concatenar" em inglês). Em geral é usado desta maneira para exibir o conteúdo de um arquivo na saída padrão:[1]
História
cat faz parte das primeiras versões do Unix, e substituiu pr, uma ferramenta PDP-7 que exibia o conteúdo de um único arquivo na tela.[3]
Uma versão de cat embutida em GNU "coreutils" foi escrita por Torbjorn Granlund e Richard Stallman.[4]
Uso
O "Single Unix Specification" define o funcionamento de cat como "ler arquivos na sequência dada nos argumentos, exibindo o conteúdo dos mesmos na saída padrão nessa mesma sequência".
Se um dos arquivos for especificado como um único hífen(-), cat lerá da entrada padrão naquela instância. Se nenhum arquivo for especificado, cat automaticamente lerá apenas da entrada padrão.
-u usa "unbuffered I/O" para a saída padrão. POSIX não especifica o comportamento do comando sem essa opção.
-v (GNU: --show-nonprinting), exibe caracteres que não são exibidos por padrão, exceto "tabs" e caracteres de fim de linha
Casos de uso
cat pode ser usado para direcionar um arquivo para um programa que requer texto simples ou dados binários como entrada. cat não destrói bytes não referentes a texto quando concatena e exibe os arquivos. Com isso, seus dois principais casos de uso são arquivos de texto e certos arquivos binários com formatos compatíveis.
Concatenação de texto é limitado a arquivos de texto que usam a mesma codificação, como ASCII. catnão fornece uma forma de concatenar arquivos de texto Unicode que contém uma "Byte Order Mark" ou arquivos que usam codificações diferentes entre si.
Para muitas estruturas binárias de dados, o arquivo resultante da concatenação pode não ser válido; por exemplo, se um arquivo tem um cabeçalho ou rodapé único, o resultado duplicará os mesmos. Entretanto, para alguns formatos multimídia digitais, o arquivo resultante é válido, nesse caso, cat fornece uma maneira efetiva de anexar arquivos. Arquivos de vídeo são um exemplo significante de formatos que cat pode concatenar sem problemas, como MPEG (MPEG-1 e MPEG-2) e outros formatos de vídeo digitais.
Exemplos
Comando
Explicação
cat arquivo1.txt
Exibe o conteúdo do arquivo
cat arquivo1.txt arquivo2.txt
Concatena dois arquivos e exibe o resultado no terminal
Concatena os arquivos, ordena as linhas, e escreve a saída no arquivo teste4.txt
cat arquivo1 arquivo2 | less
Roda o programa "less" com a concatenação de arquivo1 e arquivo2 como entrada
Cultura Unix
A definição Jargon file
A versão 4.4.7 do Jargon File lista o seguinte como a definição de cat:
To spew an entire file to the screen or some other output sink without pause (syn. blast).
By extension, to dump large amounts of data at an unprepared target or with no intention of browsing it carefully. Usage: considered silly. Rare outside Unix sites. See also dd, BLT.
Among Unix fans, cat(1) is considered an excellent example of user-interface design, because it delivers the file contents without such verbosity as spacing or headers between the files, and because it does not require the files to consist of lines of text, but works with any sort of data.
Among Unix critics, cat(1) is considered the canonical example of bad user-interface design, because of its woefully unobvious name. It is far more often used to blast a single file to standard output than to concatenate two or more files. The name cat for the former operation is just as unintuitive as, say, LISP's cdr.
O "Useless use of cat"
O Useless use of cat (UUOC), ou no português "Uso Inútil de cat", é um jargão Unix comum usado para denominar os casos onde o comando é usado simplesmente como uma forma de conveniência ao usuário.[6] Isso também é referido como "abuso de cat". Segue um exemplo comum de abuso de cat :
cat arquivo | comando arg1 arg2 argn
Isso pode ser reescrito utilizando o redirecionamento do stdin, em qualquer uma das seguintes formas (a primeira sendo mais comum):
Além de outros benefícios, os meios que usam redirecionamento permitem que o comando performe um acesso aleatório no arquivo, enquanto o exemplo com cat não. Isso acontece pois o redirecionamento abre o arquivo como o "stdin file descriptor", algo que o comando pode acessar por completo, enquanto o método com cat simplesmente fornece os dados como um fluxo de bytes.
Outro caso comum onde cat é desnecessário é quando um comando lê sempre da entrada padrão, a não ser no caso onde um arquivo é fornecido como argumento. Esse é o caso com muitos comandos comuns. Os exemplos seguintes:
cat "$arquivo" | grep "$estampa"
cat "$arquivo" | less
Podem ser escritos como:
grep "$estampa" "$arquivo"
less "$arquivo"
Um uso interativo comum de cat para arquivos únicos é o de exibir o conteúdo do arquivo na saída padrão. No entanto, se a saída for canalizada ou redirecionada, cat é desnecessário. Um cat escrito com UUOC ainda pode ser preferível por razões de legibilidade, já que ler uma sequência de canalizações da esquerda para a direita pode torná-la mais fácil de ser conceitualizada.[7] Além disso, o uso incorreto do símbolo de redirecionamento ">" ao invés de "<" (muitas vezes adjacentes no teclado) pode deletar permanentemente o conteúdo de um arquivo, e uma forma de evitar que isso aconteça é o uso de cat . Compare:
tac é um comando Linux que te permite ver um arquivo linha por linha de trás para frente. É nomeado pela analogia com cat.
Uso:
Usage: tac [OPTION]... [FILE]...
Write each FILE to standard output, last line first.
With no FILE, or when FILE is -, read standard input.
Mandatory arguments to long options are mandatory for short options too.
-b, --before attach the separator before instead of after
-r, --regex interpret the separator as a regular expression
-s, --separator=STRING use STRING as the separator instead of newline
--help display this help and exit
--version output version information and exit
Referências
↑ abIndiana University, University Information Technology Services, Knowledge Base, Introduction to Unix commands, ls[em linha]
↑The University of Utah, College of Science, Department of Mathematics, Mathematics Department computing facilities, Unix Command Summary[em linha]