Todo geek linux precisa saber sed e awk. Aqui está o porquê…

Video: Using AWK to format output

Dois dos utilitários maioria criminosa subestimado Linux são Sed e Awk. Embora se reconheça que eles podem parecer um pouco misterioso, se você sempre tem que fazer mudanças repetitivas para grandes pedaços de código ou de texto, ou se você já tem que analisar um texto, Sed e Awk são inestimáveis.

Então, quais são eles? Como eles são usados? E como, quando combinados, eles tornam mais fácil para processar texto?

O que é Sed?

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

O nome significa editor de fluxo, e isso é meio que ele faz. Ele permite que você edite corpos ou fluxos de texto programaticamente, através de uma linguagem de programação compacto e simples, mas Turing completo.

O modo como funciona é simples: ele lê o texto, linha por linha em um buffer. Para cada linha, ele vai executar as instruções predefinidas, se for o caso.

Video: COMPRAS: GEEK + DECORAÇÃO | Garota VintaGeek

Por exemplo, se alguém era escrever um script sed que substituiu a palavra “cerveja”, com “soda”, e, em seguida, passou em um arquivo de texto que continha as letras inteiras para “99 garrafas da cerveja na parede”, seria ir através desse arquivo em uma linha por linha, e imprimir “99 garrafas de refrigerante na parede”, e assim por diante.

O script mais básico Sed é um Olá mundo. Aqui, usamos o utilitário Unix eco, que cordas apenas de saída, para imprimir “Olá Mundo”. Mas nós tubulação isso para Sed, e dizer-lhe para substituir “mundo” com”Dave”. material auto-explicativo.

eco "Olá Mundo" | s sed / world / Dave

sedawk-dave

Você também pode combinar as instruções de sed em arquivos, se você precisa fazer alguma edição mais complicada. Inspirado por esta discussão Reddit hilariante, eu vou tomar as letras de A-Ha de Preste atenção em mim, e substitua cada instância de “I”, “Me” e “Meu”, com Greg.

Primeiro, eu vou colocar as letras para a música em um arquivo de texto chamado tom.txt. Então eu vou abrir o meu editor de texto preferido (meu favorito é Vim, mas nano e gedit são ambos excelentes escolhas), e adicione as seguintes linhas. Verifique se o arquivo que você criar termina com .sed.O Top 7 razões para dar o Vim Editor de Texto A ChanceO Top 7 razões para dar o Vim Editor de Texto A ChanceDurante anos, eu tentei um editor de texto após o outro. Você nome dele, eu tentei. Eu usei todos e cada um destes editores por mais de dois meses como meu editor principal do dia-a-dia. De alguma forma, eu ...consulte Mais informação

sed-greg-sed

Você pode notar que no exemplo acima, eu tenho repetido mim mesmo (por exemplo, s / me / Greg / e S / Me / Greg /). Isso porque algumas versões do Sed, como o que vem com o Mac OS X, faça não case-insensitive apoio correspondente. Como resultado, temos que escrever uma duas instruções Sed para cada palavra, por isso reconhece a versão capitalizadas e com inicial minúscula.

Isso não vai funcionar perfeitamente, como se você substituiu cada instância de “I”, “Me” e “Meu” com a mão. Lembre-se, nós estamos apenas usando isso como um exercício para demonstrar como você pode agrupar as instruções de sed em um script e, em seguida executá-los com um único comando.

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

Video: Bash on Ubuntu on Windows

tom.txt gato | sed -f greg.sed

Vamos desacelerar e olhar para o que este faz. leitores mais atentos terão notado o que estamos não usando eco aqui. Estamos usando Cat. Isso porque, enquanto Cat irá imprimir todo o conteúdo do arquivo, eco irá imprimir apenas o nome do arquivo. Você vai ter notado também que nós estamos correndo Sed com a bandeira “-f”. Isto diz-lhe para abrir o script como um arquivo.

O resultado final é a seguinte.

sed-greg-script

É importante notar também que Sed suporta expressões regulares (regex). Estes sistemas permitem definir padrões no texto, usando uma sintaxe especial e complicado.

Aqui está um exemplo de como isso pode funcionar. Nós vamos tomar as letras de músicas mencionadas, mas usar regex para imprimir cada linha que não começar com “Take”.

Video: awk command examples in Ubuntu

tom.txt gato | sed / ^ Leve / d

sed-regex-take



Sed é, naturalmente, extremamente útil. Mas é ainda mais poderoso quando combinado com Awk.

O que é Awk?

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

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

Awk funciona, lendo um arquivo de texto ou entrada de fluxo de uma linha de cada vez. Cada linha é digitalizado para ver se ele corresponde a um padrão pré-definido. Se for encontrada uma correspondência, uma ação é executada.

Mas enquanto Sed e Awk pode compartilhar fins semelhantes, eles são duas línguas completamente diferentes, com duas filosofias de design completamente diferentes. Awk mais se assemelha a alguns linguagens de propósito geral, como C, Python e Bash. Tem coisas como funções, e uma abordagem C-like mais para coisas como iteração e variáveis ​​(James Bruce explicou como iteração obras). Simplificando, ele se sente mais como uma linguagem de programação.Como escolher um linguagem de programação para aprender hoje & Obter um ótimo trabalho em 2 anosComo escolher um linguagem de programação para aprender hoje & Obter um ótimo trabalho em 2 anosPode levar anos de trabalho dedicado para se tornar um verdadeiramente bom programmer- assim há uma maneira de escolher a linguagem certa para começar a partir de hoje, a fim de ser contratado amanhã?consulte Mais informação

Então, vamos experimentá-lo. Usando as letras de Take On Me, nós estamos indo para imprimir todas as linhas que são mais de 20 caracteres.

comprimento awk `($ 0) gt; 80 `tom.txtawk de comprimento

O próximo exemplo eu tenho descaradamente plagiou a documentação oficial Awk. Mas é um grande exemplo do potencial dessa poderosa linguagem, ainda pequena. É também uma grande demonstração de como as coisas como iteração e variáveis ​​trabalhar nele. Primeiro, crie um arquivo chamado “WordCount.awk”, e adicione as seguintes linhas.

{Para (i = 1 i lt; = NF- i ++) freq [$ i]} ++
END {for (palavra em freq) printf "% S t% d n", Palavra, freq [palavra]}

Guardá-lo, e depois executá-lo com o seguinte comando.

awk -f WordCount.awk tom.txt

awk-wordcount
Legal certo? Você provavelmente vai perceber que eles não estão em qualquer tipo de ordem. Você posso ordenar os resultados usando o utilitário tipo Unix. Mas vamos deixar isso para outro dia. Nós estamos indo para mantê-lo simples.

A combinação dos dois

Awk e Sed são ambos extremamente potente quando combinado. Você pode fazer isso usando pipes Unix. Esses são os “|” bits entre comandos.

Vamos tentar isso: Nós estamos indo para listar todas as linhas em Take On Me que têm mais de 20 caracteres, usando Awk. Então, nós estamos indo para tirar todas as linhas que começam com "Levar". Juntos, tudo se parece com isso:

awk `comprimento ($ 0) gt; 20` tom.txt | sed / ^ Leve / d

E produz o seguinte:

-Awk de comprimento sed

Agora vamos inverter esta situação. Vamos começar por remover todas as linhas que começam com tomar, e, em seguida, tubulação-los para Awk, onde vamos contar quantas vezes cada palavra aparece. Parece um pouco como este:

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

-Awk-wordcount sed

O poder do Sed e Awk

Há tanta coisa que você pode explicar em um único artigo. Mas eu espero que eu tenha ilustrou como imensamente poderosa Sed e Awk são. 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 você precisa fazer previsíveis alterações consecutivas a um documento de texto, Sed e Awk são grandes para analisar arquivos de log. Isto é especialmente útil quando você está tentando depurar um problema em seu servidor LAMP, ou olhando para seus logs de acesso para ver se o servidor foi hackeado.Inscreveu para somente SSH Web Hosting? Não se preocupe - instalar facilmente Qualquer Software WebInscreveu para somente SSH Web Hosting? Não se preocupe - instalar facilmente Qualquer Software WebNão sei a primeira coisa sobre operacional Linux através de sua linha de comando poderoso? Não se preocupe mais.consulte Mais informação

Também encontrou uma aplicação interessante para Sed e Awk? Existem outros utilitários Linux que você sente é subestimado? Deixe-me saber nos comentários abaixo, e nós vamos conversar.


Artigos relacionados