Todo geek Linux precisa conhecer Sed e Awk. Aqui está o porquê…

Dois dos utilitários Linux menos apreciados criminalmente são os reconhecidamente obscuros Sed e Awk. Mas o que são eles? Como eles são usados? E como eles facilitam o processamento de texto?

Dois dos utilitários Linux menos apreciados criminalmente são os reconhecidamente obscuros Sed e Awk.  Mas o que são eles?  Como eles são usados?  E como eles facilitam o processamento de texto?
Propaganda

Dois dos utilitários Linux mais subestimados são Sed e Awk. Apesar de admitir que eles podem parecer um pouco estranhos, se você tiver que fazer alterações repetitivas em grandes pedaços de código ou texto, ou se você tiver que analisar algum texto, Sed e Awk são inestimáveis.

Então, o que são eles? Como eles são usados? E como, quando combinados, eles facilitam o processamento de texto?

O que é Sed?

Sed foi desenvolvido em 1971 no Bell Labs, pelo lendário pioneiro da computação Lee E. McMahon.

O nome significa editor de fluxo, e isso é o que faz. Ele permite que você edite corpos ou fluxos de texto de forma programática, por meio de uma linguagem de programação compacta e simples, ainda que completa.

A maneira como funciona é simples: lê texto, linha por linha, em um buffer. Para cada linha, ele executará as instruções predefinidas, onde aplicável.

Por exemplo, se alguém escrevesse um script Sed que substituísse a palavra “cerveja” por “refrigerante” e passasse em um arquivo de texto que contivesse a letra inteira para “99 garrafas de cerveja na parede”, seria possível através desse arquivo em uma linha por linha e imprimir "99 garrafas de refrigerante na parede" e assim por diante.

O script Sed mais básico é o Hello World. Aqui, usamos o utilitário Unix Echo, que meramente libera strings, para imprimir “Hello World”. Mas nós canalizamos isso para Sed e dizemos para substituir "World" por "Dave". Coisas auto-explicativas.

 echo "Olá mundo" | sed s / world / Dave 

sedawk-dave

Você também pode combinar instruções Sed em arquivos, se você precisar fazer alguma edição mais complicada. Inspirado por este hilariante segmento do Reddit, vou pegar a letra de Take-me do A-Ha, e substituir cada instância de "I", "Me" e "My", por Greg.

Primeiro, colocarei as letras da música em um arquivo de texto chamado tom.txt . Então eu vou abrir o meu editor de texto preferido (meu favorito é Vim The Top 7 Razões para dar ao editor de texto Vim uma chance As 7 principais razões para dar ao editor de texto Vim uma chance Por anos, eu tentei um editor de texto depois Você nomeou, eu tentei Eu usei todos e cada um desses editores por mais de dois meses como meu principal editor do dia-a-dia De alguma forma, eu ... Leia Mais, mas Nano nano vs. vim: Terminal Editores de Texto Comparados nano vs. vim: Editores de Texto Terminal Comparados Embora o Linux tenha se tornado fácil o suficiente para praticamente qualquer um usar sem ter que usar o Terminal, há alguns de nós que o usam regularmente ou estão curiosos sobre como se pode controlar. Leia mais e Gedit gedit: Um dos editores de texto simples com mais recursos [Linux e Windows] gedit: Um dos editores de texto simples com mais recursos [Linux e Windows] Quando você pensa em editores de texto simples, a primeira coisa que pode aparecer em sua cabeça é o aplicativo Bloco de Notas do Windows. Ele faz exatamente o que os estados de descrição de seu trabalho - recursos simples para um texto simples ... Leia mais são excelentes opções) e adicione as seguintes linhas. Assegure-se de que o arquivo criado termine com .sed.

sed-greg-sed

Você pode notar que no exemplo acima, eu repeti a mim mesmo (por exemplo, s / me / Greg / e / Me / Greg /). Isso porque algumas versões do Sed, como a que vem com o Mac OS X, não suportam a correspondência de maiúsculas e minúsculas. Como resultado, temos que escrever duas instruções Sed para cada palavra, para que ela reconheça a versão maiúscula e não capitalizada.

Isso não funcionará perfeitamente, como se você tivesse substituído cada instância de "eu", "eu" e "meu" manualmente. Lembre-se, estamos apenas usando isso como um exercício para demonstrar como você pode agrupar as instruções do Sed em um script e depois executá-las com um único comando.

Então, precisamos invocar o arquivo. Para fazer isso, nós executamos este comando.

 gato tom.txt | sed -f greg.sed 

Vamos desacelerar e ver o que isso faz. Leitores de olhos árabes terão notado que não estamos usando o Echo aqui. Estamos usando o gato. Isso porque, enquanto a Cat imprime todo o conteúdo do arquivo, o eco só imprime o nome do arquivo. Você também notou que estamos executando o Sed com o sinalizador "-f". Isso diz para abrir o script como um arquivo.

O resultado final é isso.

sed-greg-script

Também é importante notar que Sed suporta expressões regulares (REGEX). Estes permitem que você defina padrões no texto, usando uma sintaxe especial e complicada.

Aqui está um exemplo de como isso pode funcionar. Nós vamos pegar as letras das músicas mencionadas, mas use o regex para imprimir todas as linhas que não começam com “Take”.

 gato tom.txt | sed / ^ Take / d 

sed-regex-take

Sed é, claro, incrivelmente útil. Mas é ainda mais poderoso quando combinado com o Awk.

O que é Awk?

Awk, como Sed, é uma linguagem de programação projetada para lidar com grandes corpos de texto. Mas enquanto Sed é usado para processar e modificar texto, o Awk é usado principalmente como uma ferramenta para análise e geração de relatórios .

Como Sed, Awk foi desenvolvido pela primeira vez no Bell Labs na década de 1970. Seu nome não vem do que o programa faz, mas sim dos sobrenomes de cada um dos autores - Alfred Aho, Peter Weinberger e Brian Kernaghan.

O Awk funciona lendo um arquivo de texto ou um fluxo de entrada, uma linha por vez. Cada linha é digitalizada para ver se corresponde a um padrão predefinido. Se uma correspondência for encontrada, uma ação será executada.

Mas enquanto Sed e Awk podem compartilhar propósitos semelhantes, são duas línguas completamente diferentes, com duas filosofias de design completamente diferentes. Awk se assemelha mais a algumas linguagens de propósito geral Como escolher uma linguagem de programação para aprender hoje e obter um ótimo trabalho em 2 anos Como escolher uma linguagem de programação para aprender hoje e obter um ótimo trabalho em 2 anos Pode levar anos de trabalho dedicado para tornar-se um bom programador; Então, há uma maneira de escolher a linguagem certa para começar a partir de hoje, a fim de ser contratado amanhã? Leia mais, como C, Python e Bash. Tem coisas como funções e uma abordagem mais semelhante a C para coisas como iteração e variáveis ​​(James Bruce explicou como funciona a iteração Os princípios básicos da programação para iniciantes (parte 2) Os fundamentos absolutos da programação para iniciantes (parte 2) 2 de nosso guia de iniciantes absolutos para programação, eu estarei cobrindo o básico de funções, valores de retorno, loops e condicionais.Certifique-se de que você leu a parte 1 antes de abordar isso, onde eu expliquei o ... Leia mais). Simplificando, parece mais uma linguagem de programação.

Então, vamos tentar. Usando as letras de Take On Me, vamos imprimir todas as linhas com mais de 20 caracteres.

 comprimento do awk '($ 0)> 80' tom.txt awk-length

O próximo exemplo que eu deparei descaradamente da documentação oficial do Awk. Mas é um ótimo exemplo do potencial dessa poderosa e pequena linguagem. É também uma ótima demonstração de como coisas como iteração e variáveis ​​funcionam nela. Primeiro, crie um arquivo chamado “WordCount.awk” e adicione as seguintes linhas.

 {para (i = 1; i <= NF; i ++) freq [$ i] ++} 
 END {para (palavra em freq) printf "% s \ t% d \ n", palavra, freq [palavra]} 

Salve e execute-o com o seguinte comando.

 awk -f WordCount.awk tom.txt 

awk-wordcount
Legal certo? Você provavelmente notará que eles não estão em nenhum tipo de ordem. Você pode classificar os resultados usando o utilitário de classificação Unix. Mas vamos deixar isso para outro dia. Nós vamos manter isso simples.

Combinando os dois

Awk e Sed são incrivelmente poderosos quando combinados. Você pode fazer isso usando pipes Unix. Esses são os bits “|” entre os comandos.

Vamos tentar isto: vamos listar todas as linhas em Take On Me que tenham mais de 20 caracteres, usando o Awk. Então, vamos remover todas as linhas que começam com “Take” . Juntos, tudo parece assim:

 comprimento do awk '($ 0)> 20' tom.txt | sed / ^ Take / d 

E produz isso:

awk-length-sed

Agora vamos inverter isso. Vamos começar removendo todas as linhas que começam com Take e, em seguida, canalizá-las para Awk, onde contaremos quantas vezes cada palavra aparece. Parece um pouco assim:

 gato tom.txt | sed / ^ Take / d | awk -f WordCount.awk 

awk-wordcount-sed

O poder de Sed e Awk

Há tanta coisa que você pode explicar em um único artigo. Mas espero ter ilustrado o quão imensamente poderoso é Sed e Awk. Simplificando, eles são uma potência de processamento de texto.

Então por que você deveria se preocupar? Bem, além do fato de que você nunca sabe quando precisa fazer alterações previsíveis e repetitivas em um documento de texto, Sed e Awk são ótimos para analisar arquivos de log. Isto é especialmente útil quando você está tentando depurar um problema no seu servidor LAMP. Assinado para Web Hosting somente via SSH? Não Se Preocupe - Instale Facilmente Qualquer Software Web Assinado Para Web Hosting Apenas SSH? Não se preocupe - Instale facilmente qualquer software da Web Não sabe a primeira coisa sobre como operar o Linux através de sua poderosa linha de comando? Não se preocupe mais. Leia mais ou observe seus registros de acesso para ver se seu servidor foi invadido.

Você encontrou um uso interessante para Sed e Awk? Existem outros utilitários do Linux que você sente subestimados? Deixe-me saber nos comentários abaixo, e vamos conversar.

In this article