Unix / Linux - Pipes e Filtros

Neste capítulo, discutiremos em detalhes sobre tubos e filtros no Unix. Você pode conectar dois comandos juntos para que a saída de um programa se torne a entrada do próximo programa. Dois ou mais comandos conectados desta forma formam um tubo.

Para fazer um cano, coloque uma barra vertical (|) na linha de comando entre dois comandos.

Quando um programa obtém sua entrada de outro programa, ele executa alguma operação nessa entrada e grava o resultado na saída padrão. É referido como umfilter.

O Comando grep

O comando grep procura um arquivo ou arquivos em busca de linhas que possuam um determinado padrão. A sintaxe é -

$grep pattern file(s)

O nome "grep" vem do comando ed (um editor de linha do Unix) g/re/p que significa “pesquisar globalmente uma expressão regular e imprimir todas as linhas que a contenham”.

Uma expressão regular é um texto simples (uma palavra, por exemplo) e / ou caracteres especiais usados ​​para correspondência de padrões.

O uso mais simples de grep é procurar um padrão que consiste em uma única palavra. Ele pode ser usado em um tubo de modo que apenas as linhas dos arquivos de entrada contendo uma determinada string sejam enviadas para a saída padrão. Se você não fornecer ao grep um nome de arquivo para leitura, ele lerá sua entrada padrão; é assim que todos os programas de filtro funcionam -

$ls -l | grep "Aug"
-rw-rw-rw-   1 john  doc     11008 Aug  6 14:10 ch02
-rw-rw-rw-   1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--   1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

Existem várias opções que você pode usar junto com o grep comando -

Sr. Não. Opção e descrição
1

-v

Imprime todas as linhas que não correspondem ao padrão.

2

-n

Imprime a linha correspondida e seu número de linha.

3

-l

Imprime apenas os nomes dos arquivos com linhas correspondentes (letra "l")

4

-c

Imprime apenas a contagem de linhas correspondentes.

5

-i

Corresponde a maiúsculas ou minúsculas.

Vamos agora usar uma expressão regular que diz ao grep para encontrar linhas com "carol", seguido por zero ou outros caracteres abreviados em uma expressão regular como ". *"), seguido por "Aug" .−

Aqui, estamos usando o -i opção de ter uma pesquisa que não diferencia maiúsculas de minúsculas -

$ls -l | grep -i "carol.*aug"
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

O comando sort

o sortcomando organiza linhas de texto em ordem alfabética ou numérica. O exemplo a seguir classifica as linhas no arquivo de comida -

$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java

Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$

o sortcomando organiza linhas de texto em ordem alfabética por padrão. Existem muitas opções que controlam a classificação -

Sr. Não. Descrição
1

-n

Classifica numericamente (exemplo: 10 classificará após 2), ignora espaços em branco e tabulações.

2

-r

Inverte a ordem de classificação.

3

-f

Classifica maiúsculas e minúsculas juntas.

4

+x

Ignora primeiro x campos ao classificar.

Mais de dois comandos podem ser vinculados em um tubo. Pegando um exemplo de tubo anterior usandogrep, podemos classificar ainda mais os arquivos modificados em agosto por ordem de tamanho.

O seguinte tubo consiste nos comandos ls, grep, e sort -

$ls -l | grep "Aug" | sort +4n
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-rw-  1 john  doc     11008 Aug  6 14:10 ch02
$

Este pipe classifica todos os arquivos em seu diretório modificados em agosto por ordem de tamanho e os imprime na tela do terminal. A opção de classificação + 4n ignora quatro campos (os campos são separados por espaços em branco) e classifica as linhas em ordem numérica.

O pg e mais comandos

Uma saída longa normalmente pode ser compactada por você na tela, mas se você executar mais texto ou usar o pgcomando como um filtro; a exibição para quando a tela estiver cheia de texto.

Vamos supor que você tenha uma longa lista de diretórios. Para facilitar a leitura da lista classificada, canalize a saídamore como segue -

$ls -l | grep "Aug" | sort +4n | more
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--  1 john  doc     14827 Aug  9 12:40 ch03
	.
	.
	.
-rw-rw-rw-  1 john  doc     16867 Aug  6 15:56 ch05
--More--(74%)

A tela será preenchida quando estiver repleta de texto, consistindo de linhas classificadas pela ordem do tamanho do arquivo. Na parte inferior da tela está omore prompt, onde você pode digitar um comando para percorrer o texto classificado.

Depois de concluir esta tela, você pode usar qualquer um dos comandos listados na discussão do programa more.