Existem muitos utilitários disponíveis nos sistemas Linux e Unix que permitem processar e filtrar arquivos de texto. cut
é um utilitário de linha de comando que permite cortar partes de linhas de arquivos especificados ou dados canalizados e imprimir o resultado na saída padrão. Ele pode ser usado para cortar partes de uma linha por delimitador, posição de byte e caractere.
Neste artigo, mostraremos como usar o cut
comando através de exemplos práticos e explicações detalhadas das opções mais comuns.
Como usar o comando cut #
A sintaxe para o cut
comando é o seguinte:
As opções que informam cut
se deve usar um delimitador, posição de byte ou caractere ao cortar partes selecionadas das linhas são as seguintes:
Você pode usar um, e apenas uma das opções listadas acima.
Outras opções são :
-
-d
(--delimiter
) – Especifique um delimitador que será usado em vez do padrão ” TAB ”delimitador. -
--complement
– Complementa a seleção. Ao usar esta opção,cut
exibe todos os bytes, caracteres, ou campos exceto o se selecionado. -
-s
(--only-delimited
) – Por padrãocut
imprime as linhas que não contêm nenhum caractere delimitador. Quando esta opção é usada,cut
não imprime linhas que não contenham delimitadores. -
--output-delimiter
– O comportamento padrão decut
é usar o delimitador de entrada como o delimitador de saída. Esta opção permite que você especifique uma string delimitadora de saída diferente.
O comando cut
pode aceitar zero ou mais nomes de ARQUIVOS de entrada. Se nenhum FILE
for especificado ou quando FILE
for -
, cut
será lido da entrada padrão.
O argumento LIST
passado para -f
, -b
e -c
as opções podem ser um número inteiro, vários números inteiros separados por vírgulas, um intervalo de inteiros ou vários intervalos de inteiros separados por vírgulas . Cada intervalo pode ser um dos seguintes:
-
N
o enésimo campo, byte ou caractere, começando em 1. -
N-
do enésimo campo, byte ou caractere, até o final da linha. -
N-M
do enésimo para o Mth campo, byte ou caractere. -
-M
do primeiro ao Mth campo, byte ou caractere.
Como cortar por campo #
Para especificar os campos que devem ser cortados, invoque o comando com a opção -f
. Quando não especificado, o delimitador padrão é “TAB”.
Nos exemplos abaixo, usaremos o seguinte arquivo. Os campos são separados por tabulações.
Por exemplo, para exibir o primeiro e o terceiro campos, você usaria:
Ou se você deseja exibir do 1º ao 4º campo:
Como cortar com base em um delimitador #
Para cortar com base em um delimitador, invoque o comando com -d
, seguida pelo delimitador que deseja usar.
Por exemplo, para exibir o primeiro e o terceiro campos usando “:” como delimitador, você digitaria:
Você pode usar qualquer caractere único como delimitador. No exemplo a seguir, usamos o caractere de espaço como delimitador e imprimimos o segundo campo:
Como complementar a seleção #
Para complementar a lista de campos de seleção, use a opção --complement
. Isso imprimirá apenas os campos que não foram selecionados com a opção -f
.
O comando a seguir imprimirá todos os campos, exceto o primeiro e o terceiro:
Como especificar um delimitador de saída #
Para especificar o delimitador de saída, use o --output-delimiter
opção. Por exemplo, para definir o delimitador de saída para _
, você usaria:
Como cortar por bytes e caracteres #
Antes de prosseguir, vamos fazer uma distinção entre bytes e caracteres.
Um byte tem 8 bits e pode representar 256 valores diferentes. Quando o padrão ASCII foi estabelecido, ele levou em consideração todas as letras, números e símbolos necessários para trabalhar com o inglês. A tabela de caracteres ASCII possui 128 caracteres e cada caractere é representado por um byte.Quando os computadores começaram a se tornar globalmente acessíveis, as empresas de tecnologia começaram a introduzir novas codificações de caracteres para diferentes idiomas. Para idiomas com mais de 256 caracteres, um mapeamento simples de 1 para 1 não era possível. Isso leva a diferentes problemas, como compartilhamento de documentos ou navegação em sites, e um novo padrão Unicode que pode lidar com a maioria dos sistemas de escrita do mundo era necessário. O UTF-8 foi criado para resolver esses problemas. No UTF-8, nem todos os caracteres são representados com 1 byte. Os caracteres podem ser representados com 1 byte a 4 bytes.
A opção -b
(--bytes
) diz ao comando para corte seções de cada linha especificada pelas posições de byte fornecidas.
Nos exemplos a seguir, estamos usando o caractere ü
que ocupa 2 bytes.
Selecione o 5º byte:
Selecione o 5º, 9º e 13º bytes:
Selecione o intervalo do 1º ao 5º byte:
No momento da redação deste artigo, a versão do cut
empacotado no GNU coreutils não tinha uma opção para cortar por caracteres. Ao usar a opção -c
, cut
se comporta da mesma forma que ao usar a opção -b
.
Exemplos de corte #
O comando cut
geralmente é usado em combinação com outros comandos por meio de tubulação. Aqui estão alguns exemplos:
Obtenha uma lista de todos os usuários #
A saída do comando getent passwd
é passada para cut
, que imprime o primeiro campo usando :
como delimitador.
A saída mostra uma lista de todos os usuários do sistema.
Veja os 10 comandos usados com mais frequência #
No exemplo a seguir, cut
é usado para retirar os primeiros 8 bytes de cada linha da saída do comando history
.
Conclusão #
cut
O comando é usado para exibir campos selecionados de cada linha de arquivos fornecidos ou da entrada padrão.
Embora muito útil, cut
tem algumas limitações. Não suporta a especificação de mais de um caractere como delimitador e não oferece suporte a delimitadores múltiplos.