Comando de corte do Linux

Atualizado: 04/05/2019 por Computer Hope

No Unix Como os sistemas operacionais, o comando cut remove (“corta”) seções de cada linha de um arquivo ou arquivos.

Este documento cobre a versão GNU / Linux do cut.

Sintaxe

cut OPTION... ...

Opções

-b, –bytes = LIST Selecione apenas os bytes de cada linha conforme especificado em LIST. LIST especifica um byte, um conjunto de bytes ou um intervalo de bytes; consulte Especificando LIST abaixo.
-c, –characters = LIST Selecione apenas os caracteres de cada linha conforme especificado em LIST. LIST especifica um caractere, um conjunto de caracteres ou um intervalo de caracteres; consulte Especificando LIST a seguir.
-d, –delimiter = DELIM use o caractere DELIM em vez de uma guia para o delimitador de campo.
-f, –fields = LIST selecione apenas estes campos em cada linha; também imprime qualquer linha que não contenha nenhum caractere delimitador, a menos que a opção -s seja especificada. LIST especifica um campo, um conjunto de campos ou um intervalo de campos; consulte Especificando LIST abaixo.
-n Esta opção é ignorada, mas é incluída por motivos de compatibilidade.
–complement complementa o conjunto de bytes, caracteres ou campos selecionados.
-s, –apenas delimitado não imprima linhas que não contenham delimitadores.
–output-delimiter = STRING use STRING como string do delimitador de saída. O padrão é usar o delimitador de entrada.
–help Exibir uma mensagem de ajuda e sair.
–version exibe as informações da versão e sai.

Notas de uso

Ao invocar cut, use a opção -b, -c ou -f, mas apenas uma delas.

Se nenhum FILE for especificado, corta as leituras da entrada padrão.

Especificando LIST

Cada LIST é composta de um inteiro, um intervalo de inteiros ou vários intervalos de inteiros separados por vírgulas. A entrada selecionada é gravada na mesma ordem em que é lida e é gravada na saída exatamente uma vez. Um intervalo consiste em:

Por exemplo, digamos que você tenha um arquivo chamado data.txt que contém o seguinte texto:

onetwothreefourfivealphabetagammadeltaepsilon

Neste exemplo, cada uma dessas palavras é separada por um caractere de tabulação, não espaços. O caractere de tabulação é o delimitador padrão de corte, portanto, por padrão, considerará um campo como qualquer coisa delimitada por uma tabulação.

Para “cortar” apenas o terceiro campo de cada linha, use o comando:

cut -f 3 data.txt

… que resultará no seguinte:

threegamma

Se, em vez disso, você quiser “cortar” apenas o segundo ao quarto campo de cada linha, use o comando:

cut -f 2-4 data.txt

… que produzirá o seguinte:

twothreefourbetagammadelta

Se você deseja” cortar “apenas o primeiro a do segundo e do quarto ao quinto campo de cada linha (omitindo o terceiro campo), use o comando:

cut -f 1-2,4-5 data.txt

… que resultará no seguinte:

onetwofourfivealphabetadeltaepsilon

Ou, digamos que você deseja o terceiro campo e todos os campos após ele, omitindo os dois primeiros campos. Nesse caso, você pode usar o comando:

cut -f 3- data.txt

… que produzirá o seguinte:

threefourfivegammadeltaepsilon

A especificação de um intervalo com LIST também se aplica ao corte de caracteres (-c) ou bytes (-b) de uma linha. Por exemplo, para gerar apenas o terceiro até o décimo segundo caractere de cada linha de data.txt, use o comando:

cut -c 3-12 data.txt

… que resultará o seguinte:

etwothrephabetag

Lembre-se de que o “espaço” entre cada palavra é, na verdade, um único caractere de tabulação, de modo que ambas as linhas de saída exibem dez caracteres: oito caracteres alfanuméricos e dois caracteres de tabulação. Em outras palavras, cortar é omitir os primeiros dois caracteres de cada linha, contando as tabulações com um caractere cada; saída de caracteres de três a doze, contando guias como um caractere cada; e omitindo quaisquer caracteres após o décimo segundo.

Contar bytes em vez de caracteres resultará na mesma saída neste caso, porque em um arquivo de texto codificado em ASCII, cada caractere é representado por um único byte (oito bits ) De dados. Portanto, o comando:

cut -b 3-12 data.txt

… irá, para nosso arquivo data.txt, produzir exatamente a mesma saída:

etwothrephabetag

Especificando um delimitador diferente de tabulação

O caractere de tabulação é o delimitador padrão que o corte usa para determinar o que constitui um campo. Portanto, se os campos do seu arquivo já estiverem delimitados por tabulações, você não precisa especificar um caractere delimitador diferente.

Você pode especificar qualquer caractere como delimitador, no entanto.Por exemplo, o arquivo / etc / passwd contém informações sobre cada usuário no sistema, um usuário por linha, e cada campo de informação é delimitado por dois pontos (“:”). Por exemplo, a linha de / etc / passwd para o usuário root pode ser semelhante a:

Esses campos contêm as seguintes informações, na seguinte ordem: separados por dois pontos:

  1. Nome de usuário
  2. Senha (mostrado como x se criptografado)
  3. Número de ID de usuário (UID)
  4. Número de ID do grupo (GID)
  5. Campo de comentário (usado pelo comando finger)
  6. Diretório inicial
  7. Shell

O nome de usuário é o primeiro campo da linha, portanto, para exibir cada nome de usuário no sistema, use o comando:

cut -f 1 -d ":" /etc/passwd

… que será gerado , por exemplo:

rootdaemonbinsyschope

(Existem muito mais contas de usuário em um sistema típico, incluindo muitas contas específicas para serviços do sistema, mas para este exemplo vamos fingir existem apenas cinco usuários.)

O terceiro campo de cada linha no arquivo / etc / passwd é o UID (número de ID do usuário), portanto, para exibir cada nome de usuário e número de ID de usuário, use o comando:

… que produzirá o seguinte, por exemplo:

root:0daemon:1bin:2sys:3chope:1000

Como você pode ver, o resultado será delimitado, por padrão, usando o mesmo caractere delimitador especificado para a entrada. Neste caso, é o caractere de dois pontos (“:”). Você pode especificar um delimitador diferente para a entrada e saída, no entanto. Portanto, se você quiser executar o comando anterior, mas tiver a saída delimitada por um espaço, você poderia usar o comando:

cut -f 1,3 -d ":" --output-delimiter=" " /etc/passwd
root 0daemon 1bin 2sys 3chope 1000

Mas e se você quiser que a saída seja delimitada por uma tabulação ? Especificar um caractere de tabulação na linha de comando é um pouco mais complicado, porque é um caractere não imprimível. Para especificá-lo na linha de comando, você deve “protegê-lo” do shell. Isso é feito de forma diferente dependendo de qual shell você ” está usando, mas no shell padrão do Linux (bash), você pode especificar o caractere de tabulação com $ “\ t”. Portanto, o comando:

cut -f 1,3 -d ":" --output-delimiter=$"\t" /etc/passwd

… produzirá o seguinte, por exemplo:

root0daemon1bin2sys3chope1000

Exemplos

cut -c 3 file.txt

Produz o terceiro caractere de cada linha do arquivo file.txt, omitindo os outros.

cut -c 1-3 file.txt

Produz os primeiros três caracteres de cada linha do arquivo file.txt, omitindo o resto.

cut -c -3 file.txt

O mesmo que o comando acima. Produza os três primeiros caracteres de cada linha de arquivo.txt.

cut -c 3- file.txt

Produza do terceiro até os últimos caracteres de cada linha do arquivo arquivo.txt, omitindo os primeiros dois caracteres.

cut -d ":" -f 1 /etc/passwd

Produz o primeiro campo do arquivo / etc / passwd, onde os campos são delimitados por dois pontos (“:”). O primeiro campo de / etc / passwd é o nome de usuário, então este comando irá exibir todos os nomes de usuário no arquivo passwd.

grep "/bin/bash" /etc/passwd | cut -d ":" -f 1,6

Exibe o primeiro e o sexto campos, delimitado por dois pontos, de qualquer entrada no arquivo / etc / passwd que especifica / bin / bash como o shell de login. Este comando produzirá o nome de usuário e o diretório inicial de qualquer usuário cujo shell de login seja / bin / bash.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *