<Anterior | Conteúdo | Próxima>
corte
O corte programa é usado para extrair uma seção de texto de uma linha e enviar a seção extraída para a saída padrão. Ele pode aceitar vários argumentos de arquivo ou entrada da entrada padrão.
Especificar a seção da linha a ser extraída é um tanto estranho e é especificado com as seguintes opções:
Tabela 20-3: opções de seleção de corte
Descrição da Opção
Descrição da Opção
-c lista_char Extraia a parte da linha definida por lista_char. A lista pode consistir em um ou mais intervalos numéricos separados por vírgulas.
-f lista_campo Extraia um ou mais campos da linha conforme definido por
field_list. A lista pode conter um ou mais campos ou intervalos de campos separados por vírgulas.
-d delim_char Quando -f é especificado, use delim_char como o caractere de delimitação de campo. Por padrão, os campos devem ser separados por um único caractere de tabulação.
--complement Extrair toda a linha de texto, exceto para essas partes
especificado por -c e / ou -f.
Como podemos ver, o caminho corte extrai o texto é bastante inflexível. corte é melhor usado para extrair texto de arquivos produzidos por outros programas, em vez de texto digitado diretamente por humanos. Vamos dar uma olhada em nosso distribuições.txt arquivo para ver se está "limpo" o suficiente para ser um bom espécime para o nosso corte exemplos. Se usarmos gato com o -A opção, podemos ver se o arquivo atende aos nossos requisitos de campos separados por tabulação:
[me @ linuxbox ~] $ gato -A distros.txt
SUSE ^ I10.2 ^ I12 / 07/2006 $
Fedora^I10^I11/25/2008$ SUSE^I11.0^I06/19/2008$
Ubuntu^I8.04^I04/24/2008$ Fedora^I8^I11/08/2007$ SUSE^I10.3^I10/04/2007$
Ubuntu^I6.10^I10/26/2006$ Fedora^I7^I05/31/2007$ Ubuntu^I7.10^I10/18/2007$ Ubuntu^I7.04^I04/19/2007$
[me @ linuxbox ~] $ gato -A distros.txt
SUSE ^ I10.2 ^ I12 / 07/2006 $
Fedora^I10^I11/25/2008$ SUSE^I11.0^I06/19/2008$
Ubuntu^I8.04^I04/24/2008$ Fedora^I8^I11/08/2007$ SUSE^I10.3^I10/04/2007$
Ubuntu^I6.10^I10/26/2006$ Fedora^I7^I05/31/2007$ Ubuntu^I7.10^I10/18/2007$ Ubuntu^I7.04^I04/19/2007$
SUSE ^ I10.1 ^ I05 / 11/2006 $
Fedora^I6^I10/24/2006$ Fedora^I9^I05/13/2008$ Ubuntu^I6.06^I06/01/2006$ Ubuntu^I8.10^I10/30/2008$ Fedora^I5^I03/20/2006$
SUSE ^ I10.1 ^ I05 / 11/2006 $
Fedora^I6^I10/24/2006$ Fedora^I9^I05/13/2008$ Ubuntu^I6.06^I06/01/2006$ Ubuntu^I8.10^I10/30/2008$ Fedora^I5^I03/20/2006$
Isso parece bom. Sem espaços incorporados, apenas caracteres de tabulação únicos entre os campos. Uma vez que o arquivo usa tabulações em vez de espaços, usaremos o -f opção para extrair um campo:
[me @ linuxbox ~] $ cut -f 3 distribuições.txt
12/07/2006
11/25/2008
06/19/2008
04/24/2008
11/08/2007
10/04/2007
10/26/2006
05/31/2007
10/18/2007
04/19/2007
05/11/2006
10/24/2006
05/13/2008
06/01/2006
10/30/2008
03/20/2006
[me @ linuxbox ~] $ cut -f 3 distribuições.txt
12/07/2006
11/25/2008
06/19/2008
04/24/2008
11/08/2007
10/04/2007
10/26/2006
05/31/2007
10/18/2007
04/19/2007
05/11/2006
10/24/2006
05/13/2008
06/01/2006
10/30/2008
03/20/2006
Porque o nosso distros arquivo é delimitado por tabulação, é melhor usar corte para extrair campos em vez de caracteres. Isso ocorre porque, quando um arquivo é delimitado por tabulação, é improvável que cada linha contenha o mesmo número de caracteres, o que torna difícil ou impossível calcular as posições dos caracteres dentro da linha. Em nosso exemplo acima, no entanto, agora extraímos um campo que felizmente contém dados de comprimento idêntico, para que possamos mostrar como a extração de caracteres funciona extraindo o ano de cada linha:
[me @ linuxbox ~] $ cut -f 3 distribuições.txt | corte -c 7-10
2006
2008
2008
2008
2007
2007
2006
2007
[me @ linuxbox ~] $ cut -f 3 distribuições.txt | corte -c 7-10
2006
2008
2008
2008
2007
2007
2006
2007
2007
2007
2006
2006
2008
2006
2008
2006
2007
2007
2006
2006
2008
2006
2008
2006
Correndo corte pela segunda vez em nossa lista, podemos extrair as posições de caractere 7 a 10, que correspondem ao ano em nosso campo de data. o 7-10 a notação é um exemplo de um intervalo. o corte A página do manual contém uma descrição completa de como os intervalos podem ser especificados.
Expansão de guias
Nosso distribuições.txt arquivo é formatado de maneira ideal para extrair campos usando corte. Mas e se quiséssemos um arquivo que pudesse ser totalmente manipulado com corte por caracteres, em vez de campos? Isso exigiria que substituíssemos os caracteres de tabulação no arquivo pelo número correspondente de espaços. Felizmente, o pacote GNU Coreutils inclui uma ferramenta para isso. Nomeado expandir, este programa aceita um ou mais argumentos de arquivo ou entrada padrão e produz o texto modificado na saída padrão.
Se processarmos nosso distribuições.txt arquivo com expandir, podemos usar o corte -c para extrair qualquer intervalo de caracteres do arquivo. Por exemplo, poderíamos usar o seguinte comando para extrair o ano de lançamento de nossa lista, expandindo o arquivo e usando corte para extrair todos os caracteres da vigésima terceira posição até o final da linha:
[me @ linuxbox ~] $ expandir distros.txt | corte -c 23-
Coreutils também fornece o não expandido programa para substituir tabulações por espaços.
Ao trabalhar com campos, é possível especificar um delimitador de campo diferente em vez do caractere de tabulação. Aqui iremos extrair o primeiro campo do / Etc / passwd arquivo:
[me @ linuxbox ~] $ cut -d ':' -f 1 / etc / passwd | cabeça
daemon raiz
[me @ linuxbox ~] $ cut -d ':' -f 1 / etc / passwd | cabeça
daemon raiz
bin sys sync jogos man lp mail notícias
bin sys sync jogos man lp mail notícias
Com o -d opção, podemos especificar o caractere de dois pontos como o delimitador de campo.