Como usar o comando de corte do Linux

O comando linux cut permite extrair partes de texto de arquivos ou fluxos de dados. É especialmente útil para trabalhar com dados delimitados, como arquivos CSV. Isso é o que você precisa saber.

índice

  1. O comando de corte
  2. Primeiros passos com o corte
  3. Usando o corte com personagens
  4. Usar fatia com dados delimitados
  5. tubo de corte de cisalhamento
  6. O delimitador de saída
  7. Um homem velho, mas Goldie

O comando de corte

O comando cut é um veterano do mundo Unix e estreou em 1982 como parte do AT&T System III UNIX. Seu objetivo na vida é cortar seções de texto de arquivos ou fluxos, de acordo com os critérios que você definir. Sua sintaxe é tão simples quanto seu propósito, mas é essa simplicidade geral que o torna tão útil.

À maneira antiga do UNIX, combinando cut com outros utilitários como o grep , você pode criar soluções elegantes e poderosas para problemas difíceis. Embora existam várias versões do cut , falaremos sobre a versão GNU/Linux padrão. Observe que outras versões, especialmente o cut encontrado nas variantes BSD, não incluem todas as opções descritas aqui.

Você pode verificar qual versão está instalada em seu computador executando este comando:

 corte --versão

Se você vir "GNU coreutils" na saída, você está na versão que descreveremos neste artigo. Todas as versões do cut possuem alguns desses recursos, mas a versão Linux adicionou melhorias.

Primeiros passos com o corte

Quer estejamos inserindo informações de cut ou usando cut para ler um arquivo, os comandos que usamos são os mesmos. Qualquer coisa que você possa fazer com um fluxo de entrada cut pode ser feito em uma linha de texto em um arquivo e vice-versa . Podemos dizer cut para trabalhar com bytes, caracteres ou campos delimitados.

Para selecionar um único byte, usamos a opção -b (byte) e informamos ao cut qual byte ou byte queremos. Neste caso, é o byte cinco. Estamos enviando a string "how-to geek" no arquivo de comando de cut com um pipe, |, de echo .

 echo 'como fazer geek' | corte -b 5

O quinto byte nessa string é "t", então cut responde imprimindo "t" na janela do terminal.

Para especificar um intervalo , usamos um hífen. Para extrair os bytes de 5 a 11 inclusive, emitiremos este comando:

 echo 'como fazer geek' | corte -b 5-11

Você pode fornecer vários bytes ou intervalos individuais separando-os com vírgulas. Para extrair o byte 5 e o byte 11, use este comando:

 echo 'como fazer geek' | corte -b 5.11

Para obter a primeira letra de cada palavra, podemos usar este comando:

 echo 'como fazer geek' | corte -b 1,5,8

Se você usar o hífen sem um número inicial, cut retornará tudo da posição 1 até o número. Se você usar o hífen sem um segundo número, cut retornará tudo, desde o primeiro número até o final da string ou linha.

 echo 'como fazer geek' | corte -b -6
 echo 'como fazer geek' | corte -b 8-

Usando o corte com personagens

Usar cut com caracteres é muito semelhante a usá-lo com bytes. Em ambos os casos, atenção especial deve ser dada aos caracteres complexos. Usando o -c (caracter), digamos que cut funciona em termos de caracteres, não bytes.

 echo 'como fazer geek' | corte -c 1,5,8
 echo 'como fazer geek' | corte -c 8-11

Estes funcionam exatamente como Goat esperaria. Mas veja este exemplo. É uma palavra de seis letras, então peço cut para retornar os caracteres de um a seis, ele deve retornar a palavra inteira. Mas não é. É um personagem curto. Para ver a palavra completa, precisamos pedir os caracteres de um a sete.

 eco 'pieta' | corte -c 1-6
 eco 'pieta' | corte -c 1-7

O problema é que o caractere "" é na verdade dois bytes. Podemos ver isso com bastante facilidade. Temos um pequeno arquivo de texto que contém esta linha de texto:

 cat unicode.txt

Examinaremos esse arquivo com o utilitário hexdump . O uso da opção -C (canônico) fornece uma tabela de dígitos hexadecimais com o equivalente ASCII à direita. A tabela ASCII não mostra o , mas há pontos que representam dois caracteres não imprimíveis. Estes são os bytes destacados na tabela hexadecimal.

 hexdump -C unicode.txt

Esses dois bytes são usados ​​pelo visualizador, neste caso o shell Bash, para identificar o "". Muitos caracteres Unicode usam três ou mais bytes para representar um único caractere.

Se pedirmos o caractere 3 ou o caractere 4, nos é mostrado o símbolo de um caractere não imprimível. Se pedirmos 3 bytes E 4, o shell os interpreta como "".

 eco 'pieta' | corte -c 3
 eco 'pieta' | corte -c 4
 eco 'pieta' | corte -c 3-4

Usar fatia com dados delimitados

Podemos pedir cut para dividir linhas de texto usando um delimitador especificado. Por padrão, o fatiamento usa um caractere de tabulação, mas é fácil dizer a ele para usar o que quisermos. Os campos no arquivo "/etc/passwd" são separados por dois pontos ":", então usaremos isso como delimitador e extrairemos algum texto.

As partes do texto entre os delimitadores são chamadas de campos e são chamadas de bytes ou caracteres, mas são precedidas pela opção -f (campos). Você pode deixar um espaço entre o "f" e o dígito, ou não.

O primeiro comando usa a opção -d (delimitador) para dizer ao cortar para usar : como o delimitador. Extraia o primeiro campo de cada linha no arquivo "/etc/passwd". Esta será uma lista longa, então estamos usando head com a opção -n (number) para exibir apenas as cinco primeiras respostas. O segundo comando faz a mesma coisa, mas usa tail para nos mostrar as últimas cinco respostas.

 cut -d':' -f1 /etc/passwd | cabeça -n 5
 cut -d':' -f2 /etc/passwd | cauda -n 5

Para extrair uma seleção de campos, liste-os como uma lista separada por vírgulas. Este comando extrairá os campos um a três, cinco e seis.

 cut -d':' -f1-3,5,6 /etc/passwd | cauda -n 5

Mesmo grep no comando, podemos procurar por linhas que incluam "/bin/bash". Isso significa que só podemos listar as entradas que têm Bash como shell padrão. Geralmente, serão contas de usuário "normais". Pediremos os campos de um a seis porque o sétimo campo é o campo shell padrão e já sabemos o que é, estamos procurando por ele.

 grep "/bin/bash" /etc/passwd | corte -d':' -f1-6

Outra maneira de incluir todos os campos, exceto um, é usar a opção --complement . Isso inverte a seleção do campo e mostra que não foi solicitado. Repetimos o último comando, mas pedimos apenas o campo sete. Em seguida, executaremos esse comando novamente com a opção --complement .

 grep "/bin/bash" /etc/passwd | corte -d':' -f7
 grep "/bin/bash" /etc/passwd | corte -d':' -f7 --complemento

O primeiro comando encontra uma lista de entradas, mas o campo sete não nos dá nada para diferenciá-las, então não sabemos a quem as entradas se referem. No segundo comando, adicionando a opção --complement obtemos tudo, exceto o campo sete.

tubo de corte de cisalhamento

Continuando com o arquivo "/etc/passwd", vamos extrair o campo cinco. Este é o nome real do usuário que possui a conta de usuário.

 grep "/bin/bash" /etc/passwd | corte -d':' -f5

O quinto campo tem subcampos separados por vírgulas. Eles raramente são concluídos, então aparecem como uma linha de vírgulas.

Podemos remover as vírgulas inserindo a saída do comando acima em outra chamada para cut . A segunda instância de cut usa a vírgula como delimitador. A opção -s (somente delimitado) diz ao cut para suprimir os resultados que não contêm o delimitador.

 grep "/bin/bash" /etc/passwd | corte -d':' -s -f5 | corte -d',' -s -f1

Como a entrada raiz não tem subcampos de vírgula no quinto campo, ela é suprimida e obtemos os resultados que estamos procurando: uma lista dos nomes de usuário "reais" configurados neste computador.

O delimitador de saída

Temos um pequeno arquivo com alguns valores separados por vírgula neles. Os campos nestes dados fictícios são:

  • IDENTIFICAÇÃO: um número de identificação do banco de dados
  • Primeiro: O nome do assunto.
  • Last : O sobrenome do assunto.
  • E-mail: Seu endereço de e-mail.
  • Endereço IP: Seu endereço IP.
  • Marca: A marca do veículo motorizado que dirigem.
  • Modelo : O modelo do veículo motorizado que dirigem.
  • Ano : O ano em que seu veículo motorizado foi fabricado.
 gatospequeno.csv

Se dissermos ao cut para usar a vírgula como delimitador, podemos extrair os campos como fizemos antes. Às vezes, você precisa extrair dados de um arquivo, mas não deseja que o delimitador de campo seja incluído nos resultados. Usando o --output-delimiter , podemos dizer à fatia qual caractere, ou na verdade, sequência de caracteres : usar em vez do delimitador real.

 corte -d ',' -f 2,3 pequeno.csv
 cut -d ',' -f 2,3 small.csv --output-delimiter=" "

O segundo comando diz cut para substituir vírgulas por espaços.

Podemos ir além e usar esta função para converter a saída em uma lista vertical. Este comando usa um caractere de nova linha como delimitador de saída. Observe o "$" que devemos incluir para que o caractere de nova linha funcione e não seja interpretado como uma sequência literal de dois caracteres.

Usaremos grep para filtrar a entrada de Morgana Renwick e pediremos cut para imprimir todos os campos do campo dois até o final do registro e usar um caractere de nova linha como delimitador de saída.

 grep 'renwick' small.csv | cut -d ',' -f2- --output-delimiter=$''

Um homem velho, mas Goldie

No momento em que este artigo foi escrito, o comando small crop está se aproximando de seu 40º aniversário e ainda estamos usando e escrevendo sobre ele hoje. Acho que cortar o texto hoje é o mesmo de 40 anos atrás. Em outras palavras, muito mais fácil quando você tem a ferramenta certa em mãos.

  • Como habilitar o JavaScript no Mozilla Firefox
  • Novo no Chrome 98, disponível hoje

descubra mais conteúdo

O que é um amplificador integrado?

Google Pixel Watch também tem detecção de queda, mas não até o próximo ano

As melhores xícaras de café aquecidas de 2022

Como automatizar seu iPhone com base na hora, atividade ou localização

"Isso deve ter sido antes do meu tempo"

Por que a NASA enviou Snoopy para a Lua? – Revisão geek

O que é o comando de corte no Linux?

O comando cut permite indicar mais de um intervalo, separando um do outro, usando uma vírgula (,): intervalo1, intervalo2, etc.

Como cortar no Linux?

Use o comando Cortar

[FILE]… Ao usar o comando cut, você deve usar uma e apenas uma das seguintes opções: -f ( -fields=LIST ): Selecione especificando um campo, um conjunto de campos ou um intervalo de campos. Esta é a opção mais utilizada.

O que o comando cut faz no Ubuntu?

Sua principal utilidade é excluir seções, campos ou caracteres da saída de um comando ou de cada uma das linhas de um arquivo de texto.

Como o corte é usado?

O verbo cut significa cortar e, como muitos outros verbos em inglês , é usado para formar. Veremos as definições de cut back (não confundir com cutback/ cut -back), cut down, cut in, cut off e cut out e mostraremos algumas frases para que você possa ver como elas são usadas.

Ir arriba