Home

Dominando o SED

image

Contents

1. um livro Aur lio M Escrevi este livro em 2002 entre os meses de Mar o e Setembro uma obra inacabada que cont m cerca de 60 do conte do planejado Ap s este per odo a escrita parou e eu n o tive mais vontade de continuar A id ia era fazer um guia completo sobre o sed uma b blia que abrangesse todos os t picos dando dicas avan adas Hoje Novembro de 2005 estou publicando o livro na Internet com o texto intocado como parou em 2002 Considero este um trabalho que n o deve ficar restrito ao meu computador pessoal pois mesmo incompleto pode ajudar outras pessoas a dominarem o assunto Se voc novato em sed leia o sed HOWTO http aurelio net sed sed HOWTO primeiro Terminada a leitura deste livro domine tamb m as Express es Regulares http aurelio net er para obter o m ximo do sed DIREITOS AUTORAIS COPYRIGHT Este conte do livre voc pode reproduzi lo em qualquer meio mas sempre deve citar a autoria Aur lio Marinho Jargas e o endere o oficial http aurelio net sed livro Boa leitura ndice Instala o ssspeseareta E dao OE SENSO Ene LI nas danada E E EE 7 AEE sirene o iara rasos one TERA ES AS D sonia A Cm Dm Sen A S 9 Um endere o sempre aponta para uma linha inteira cciseeeeeereeerereereeenera 11 Como endere ar pelo n mero da linha is cerreeeneraa aeee nenaaaeaaaa 12 Como endere ar a primeira e ou a ltima lin
2. Lembrando da escolinha A ordem dos fatores ALTERA o produto N o acredita Tudo bem vamos demonstra o ent o promptS cat abc sed s abc XXX promptS cat xxx sed S XXX xyz prompt echo abc sed f abc sed XXX prompt echo abc sed f abc sed f xxx sed xyz prompt echo abc sed f xxx sed f abc sed XXX O script abc sed troca abc por XXX e o xxx sed pega esse XXX e troca por xyz Como o xxx sed depende da altera o feita pelo abc sed ele precisa ser executado depois sen o n o haver XXX para ele trocar Al m de v rios f tamb m poss vel colocar comandos normais junto na mesma linha de comando utilizando a op o e e fazer uma salada de frutas As regras continuam as mesmas a ordem de chegada importante Acompanhe promptS cat a sed s a X g 61 Dominando o SED Arquivo prompt S Xbc prompt XXc prompt XXX prompt s X g prompt echo abc echo abc echo abc cat x sed echo abc sed sed sed sed f a sed e s b a f a sed e s b a f a sed e s c X e s c a f a sed e s b X f x sed Para n o se perder na ordem basta lembrar que o sed est recebendo v rios pedacinhos de comandos mas hora de executar uma coisa s como se ele fosse recebendo v rios bilhetinhos de papel com tarefas fazer Cada bilhete novo recebido colado com durex no final do anterior at que todos tenham sido entregue
3. d apague todas as linhas menos a ltima se for a ltima linha pegue o conte do do RESERVA g Infelizmente n o h uma receita de bolo para endere ar de maneira gen rica a ltima ocorr ncia Cada caso um caso e merece uma solu o personalizada 33 Dominando o SED Endere o Como endere ar a N sima ocorr ncia de um padr o Fazendo magia negra J vimos como complicado endere ar a ltima ocorr ncia do padr o e n o h como fazer isso de maneira gen rica Agora imagine especificar uma posi o arbitr ria de repeti o de um padr o Caso seja algo simples como s mostrar na tela a terceira linha que contenha a letra o por exemplo podemos usar a t tica anterior de usar o sed duas vezes prompt sed o d numeros txt sed 3 d cinco Sim poss vel dependendo do caso Mas contando que o grau de dificuldade enorme para se fazer isso num problema mais elaborado al m do c digo resultante ficar grande e dif cil de se manter o aconselh vel usar outra linguagem como awk que tem o conceito de linhas e registros incluindo contadores ou usar o sed em conjunto com um script shell Como nem um shell nem outro awk faz parte do nosso t pico fim de papo 34 Dominando o SED Endere o Tem uma barra no padr o que procuro e agora Ao procurar linhas com datas nomes de diret rios ou outros padr es que possuem o caractere podemos nos surpree
4. 9 um dois 10 PATT tr sSs 11 HOLD S 12 COMM N 13 PATT tr sinquatroS Ele grudou a segunda linha L4 apagou a quebra L6 mas depois come ou de novo na terceira linha L10 claro Sabemos que ao chegar ao final do script o sed l a pr xima linha e volta para o come o do script 83 Dominando o SED Quebra de linha Como fazer um la o O que precisamos aqui fazer um la o loop impedir que o sed chegue ao final do script e ao inv s disso voltar ao come o e sempre reexecutar o vN Para isso fazemos uma marca no come o do script chamaremos de inicio e sempre voltaremos para ela em todas as linhas Traduzindo isso para sed fica inicio N s n b inicio No sed da GNU esse script dar certo mas em alguns seds ele sair com erro pois o n foi aplicado na ltima linha ver cap tulo do n Ent o colocaremos um condicional aqui para n o aplicar o n na ltima linha s n ou falando a l ngua do sed aplique o N para todas as linhas exceto a ltima inicio N s n b inicio Mmmmmmm para os j iniciados em programa o notaram que o que acabamos de fazer foi um la o infinito Se dissemos ao sed para sempre voltar ao come o do script ele far isso infinitamente consumindo toda a CPU de seu computador Legal n amp 84 Dominando o SED Quebra de linha Como fazer um la o com condicional de sa da O que precisamos aqui colocar um condicional que diga
5. am com acentos Deixa ver gua poca dio cio rbita c us tamb m precisamos incluir os acentos para que nosso script n o falhe Vamos l blank lower Agora chega Esse monstrinho representa a primeira letra de uma linha Vamos atualizar nosso script com essa informa o nova Ah Lembre que o y agora tamb m precisar conter os caracteres acentuados 1 inha sed 101 Dominando o SED MAI SCULAS min sculas h s blank lower 1 guarda c pia deixa s a primeira letra y abcdefghijkImnopgrstuvwxyz aaa Bi d ii ABCDEFGHIJKLMNOPORSTUVWXYZ AAA E L O UG x s blank lower arranca a primeira letra da c pia H g sAn remonta a linha Que trabalheira para fazer uma coisa t o simples hein Pois essa a eterna divers o de se usar o sed amp D Apenas como comparativo para fazer a mesma coisa no vim basta um s lower Nu amp 102 Dominando o SED MAI SCULAS min sculas Como levantar a caixa da primeira letra de cada palavra Se o t pico anterior de levantar a caixa s da primeira letra da linha j era complicado imagina este cabeludo T o cabeludo que precisaremos de tr s seds e O primeiro sed quebra a linha em cada palavra deixando uma por linha e O segundo sed o L inha sed do t pico anterior j que temos uma palavra por linha e O terceiro sed reajuntar as palavras numa linha O grande conse
6. n o somente parte dela Afinal sendo o sed um editor orientado linha o endere o n o poderia ser diferente Ent o sempre que pensar em endere os pense em linhas Linhas inteiras Pode se redefinir os tr s tipos de endere o e ilustrar como cada um deles interpretado pelo sed 1 Quero a linha n mero N 2 Quero a linha que cont m a palavra ABCDE 3 Quero todas as linhas que estejam entre essas duas linhas 11 Dominando o SED Endere o Como endere ar pelo n mero da linha A maneira mais simples de se determinar um endere o indicar diretamente sua posi o no arquivo informando ao sed o n mero da linha qual se quer aplicar o comando Por exemplo para apagar a 5 linha de um arquivo promptS sed 5 d arquivo F cil n o Observe que o espa o em branco entre o endere o e o comando opcional ent o tamb m poderia ser 5a Mas para facilitar a visualiza o de quem quem vamos separ los sempre E assim se endere a numericamente qualquer comando linha desejada desde que se saiba qual sua posi o no arquivo 12 Dominando o SED Endere o Como endere ar a primeira e ou a ltima linha Para endere ar a primeira linha barbada 1 Nada mais Vamos apag la promptS sed 1 d arquivo Moleza Mas e a ltima Nem sempre sabemos exatamente quantas linhas tem o arquivo e inc modo ter que usar outro programa para fazer isso antes de passarmos esse n mer
7. SED Quebra de linha uma chave de fenda Aaaaaaaaah agora sim Vamos ver o debug para visualizar esse in 10 PATT um alicate de bico com cabos 11 HOLD S 12 COMM alicate N 13 PATT um alicate de bico com cabo nde borracha 14 HOLD 15 COMM s n 16 PATT um alicate de bico com cabo de borrachas 17 HOLD Como podemos ver l est a linha do alicate no padr o L10 Depois de aplicado o x L12 l veio a pr xima linha e ficou o n enfiado no meio das duas L13 Da ficou f cil chegou o s L15 e trocou o separador pelo espa o em branco L16 81 Dominando o SED Quebra de linha Como apagar todas as quebras de linha deixando tudo numa s linha Mas o do alicate foi para apenas uma linha E se precis ssemos fazer isso no arquivo todo juntando todas as linhas numa s Vamos usar agora o arquivo de n meros para ver melhor Para facilitar o trabalho dos descrentes o jeito n o sed seria com o tr tr d 1012 lt numeros txt Pensando logicamente se antes aplicamos o n endere ado linha do alicate agora basta n o colocar o endere o e ele ser aplicado para todas as linhas promptS sed N s n numeros txt um dois tr s quatro cinco seis Ei o sed est maluco ele pegou de dois em dois Vamos ver o que aconteceu PATT um HOLD COMM N PATT um ndois BwUNH 82 Dominando o SED Quebra de linha 5 HOLD S 6 COMM s An 7 PATT um doiss 8 HOLD S
8. e trabalh lo Ainda na nossa rdua tarefa de juntar todas as linhas numa s vamos ver como fica nosso script utilizando esta t cnica promptS sed H d g s n g numeros txt um dois tr s quatro cinco seis Ganhamos um espa o em branco no come o da linha que pode ser facilmente apagado com um s no final do script Mas fora isso como funciona o la o PATT um HOLD COMM H PATT um HOLD num COMM d PATT dois HOLD num COMM H PATT dois HOLD num ndois HOW O JA UI EWONH HH 89 Dominando o SED Quebra de linha O u L3 juntou o conte do do padr o um no reserva separando o do conte do j existente por um n L5 Como a primeira linha e o reserva estava vazio n o tem nada antes do n O pr ximo comando a est condicionado a n o ser executado na ltima linha ou seja ele ser aplicado para todas as outras Como ainda estamos na primeira linha ela foi apagada e como o a ap s apagar j carrega a pr xima linha no padr o e faz o script sed voltar ao come o novamente o un vai ser executado L9 fechando o ciclo E assim o padr o vai sendo juntado no reserva L11 linha ap s linha at a ltima s executando os primeiros comandos EH sia 31 PATT seis 32 HOLD Anumindoisintr sinquatroincincosS 33 COMM H 34 PATT seis 35 HOLD Anumi ndoisintr s nquatroincincoinseiss 36 COMM ld 37 PATT seis 38 HOLD Anumindoisintr sinquatroincincoinse
9. licos ou n o ser o perdidos Solu o segura Para uma solu o prova de falhas usa se uma abordagem mais conservadora e segura copiar o arquivo e redirecionar a sa da para o original 53 Dominando o SED Arquivo A primeira a o a se fazer copiar o arquivo original para um arquivo tempor rio qualquer Feito isso ent o se aplica os comandos sed neste tempor rio Agora vem o pulo do gato redireciona se a sa da do sed para o arquivo original promptS cp texto txt texto tmp txt promptS sed comandos texto tmp txt gt texto txt Dessa maneira n o estamos criando um arquivo texto txt novo mas apenas trocando o seu conte do permanecendo inalteradas as suas caracter sticas no sistema Para finalizar a opera o basta apagar o arquivo tempor rio promptS rm texto tmp txt importante ter em mente a import ncia desta abordagem segura e o porqu de utiliz la N o apenas para o sed mas tamb m para outros comandos do sistema que atuam como filtros mandando o resultado para a tela Solu o moderna Para evitar todas essas preocupa es e n o ter que criar um arquivo tempor rio algumas vers es do sed FreeBSD ssed gsed 4 possuem a op o i que aplica os comandos in place ou seja no mesmo arquivo 54 Dominando o SED Arquivo Dessa forma n o se depende mais do shell para contornar a situa o promptS sed i comandos texto txt 55 Dominando o SED Arquivo
10. mais tem mais Caso tenha um comando N no script que for aria a leitura da pr xima linha o conte do do arquivo colocado no lugar certo prompt echo sed e s ANTES p r abc txt e s DEPOIS N ANTES Eu sou o conte do do arquivo abc txt de duas linhas DEPOIS N o tente entender bug bug E como esse um bug que vem desde os tempos mais remotos do sed dificilmente ser corrigido pois muitos scripts foram feitos baseados nessas regras e mud las significa quebrar esses scripts 72 Dominando o SED Arquivo Para finalizar a sess o de detalhes do comando r ele passa por cima da op o n Essa op o deixa a sa da do sed silenciosa apenas mostrando texto quando especificado pelos comandos P p l Na pr tica vemos que o comando r imune a essa op o e mostra o conte do do arquivo sempre prompt echo sed n r abe txt Eu sou o conte do do arquivo abc txt de duas linhas 73 Dominando o SED Arquivo Como gravar um trecho de texto num arquivo Assim como temos o comando r para a leitura de arquivos tamb m temos o comando complementar w que grava num arquivo o conte do atual do espa o padr o Lembra do Sr Gerente Foobar do t pico anterior Pois al m do comando de leitura ele tamb m mandou o pobre programador fazer um comando de grava o de texto em arquivos Mas como dessa vez ele foi mais generoso e deu o prazo de 10 minutos
11. perdido Que dureza hein Mas se errando que se aprende caso voc nunca tenha feito essa caquinha ainda agora sua chance de aprender sem precisar sofrer O que ocorre que ao fazer o redirecionamento destrutivo gt a primeira coisa que o shell faz truncar o arquivo referenciado antes mesmo de come ar a executar o sed Ent o o conte do do arquivo ser apagado antes do sed poder l lo Quando finalmente o sed for chamado pelo shell receber um arquivo vazio e a n o d para fazer m gica aplicados quaisquer comandos num arquivo vazio o resultado ser sempre um arquivo vazio E fim de papo 52 Dominando o SED Arquivo Solu o gen rica Para solucionar este dilema voltamos a t tica j conhecida de redirecionar o resultado para um outro arquivo e depois mover o arquivo novo sobre o original promptS sed comandos texto txt gt texto alterado txt promptS mv texto alterado txt texto txt Para a grande maioria dos casos isso suficiente Por m caso as caracter sticas do arquivo original devam ser mantidas temos um problema Como acabamos de criar um arquivo novo para guardar o texto alterado ele ter os atributos padr o do sistema Ao mov lo sobre o arquivo original estes atributos padr o ser o herdados Atributos especiais que o arquivo original pudesse ter como grupo diferente do padr o do usu rio permiss es espec ficas rwx ou refer ncias para outros arquivos links simb
12. promptS cat verduras txt alface cenoura couve nabo vagem Mas como hoje n o um dia bom para comer couve vamos apag la da lista promptS sed couve d verduras txt alface cenoura nabo vagem Note que para especificar uma palavra como endere o devemos coloc la entre barras Dentro dessas barras pode se colocar qualquer padr o que se queira casar para se encontrar uma linha Pode ser uma ou mais palavras s mbolos ou express es regulares A melhor maneira de se ler um endere o composto por um padr o Nas linhas que contenham a palavra XXXX aplique o comando YYYY Note bem nas linhas 15 Dominando o SED Endere o Um endere o pode servir para mais de uma linha ent o o comando ser aplicado em todas as linhas que forem encontradas Dessa forma para apagar da nossa lista de verduras todas as linhas que tenham a letra o fazemos promptS sed o d verduras txt alface vagem Apenas como curiosidade este exemplo gera um resultado id ntico ao do comando promptS grep v o verduras txt 16 Dominando o SED Endere o Como aplicar v rios comandos em um mesmo endere o Agora que j sabemos quais s o os dois tipos b sicos de endere o e como defini los vamos come ar a complicar um pouco o assunto Digamos que voc goste muito de couve mas muito mesmo e queira que ela apare a mais tr s vezes na lista de verduras Teremos ent o tr s comandos a serem a
13. se acontecer tal coisa saia do la o O que seria essa tal coisa Como queremos grudar o arquivo todo numa linha s devemos aplicar o x at a ltima linha Opa Achamos nosso condicional se estiver na ltima linha saia do la o Vamos ver como fazer esse condicional Sabemos como representar a ltima linha mas como sair do la o Vamos analisar nosso script inicio N s n b inicio Esse o la o precisamos de uma rota alternativa para o fim do script v inicio lt alguma coisa gt N s n b inicio lt destino gt 85 Dominando o SED Quebra de linha Ei se formos ver direto essa sa da do la o a mesma t cnica que foi usada no pr prio la o Basta fazermos uma marca no fim e pularmos at ela N v inicio b fim N s n b inicio fim Ent o estamos no la o sempre voltando ao come o mas quando chegarmos na ltima linha pulamos para o fim Ei ei ei Notaram que na ltima linha pularemos direto para o fim e on nem ser executado Sendo assim ele n o precisa mais daquele condicional que t nhamos colocado antes prompt sed inicio b fim N s n b inicio fim numeros txt um dois tr s quatro cinco seis YOU WIN PERFECT 86 Dominando o SED Quebra de linha Como fazer um la o com condicional de entrada Um outro tipo de condicional que podemos fazer o contr rio colocando
14. shell ao executar um arquivo d uma olhadinha na primeira linha dele e v se os dois primeiros caracteres s o gradinha exclama o Se for o restante dessa linha considerado um comando de chamada que diz ao shell como executar o arquivo Funciona como um manual de instru es para o shell ler amp Quem j tem alguma familiaridade com o shell e j fez ou viu algum script shell certamente conhece a primeira linha m gica que os torna especiais bin sh Assim o shell sabe que precisa chamar o programa bin sh que o pr prio shell para executar este arquivo E isso funciona com qualquer outro comando do sistema Ent o para um script sed basta colocar como primeira linha o comando que normalmente usar amos para interpret lo bin sed f 64 Dominando o SED Arquivo Note que preciso especificar o caminho completo do execut vel do sed pois o PATH n o levado em conta nesse momento Pronto O script agora um arquivo execut vel leg timo Vamos test lo promptS meu script sed texto txt bash meu script sed command not found Opa Como assim comando n o encontrado Ahhhh que o diret rio corrente n o est inclu do no PATH do sistema ent o preciso colocar um na frente do nome do script para o shell encontr lo promptS meu script sed texto txt Caso seu script fique muito bom vai ficar claro e voc o utilize com bastante frequ ncia copie o para o diret rio d
15. voc tem um arquivo como este uma serra pequena um alicate de bico com cabo de borracha uma chave de fenda 78 Dominando o SED Quebra de linha E quer juntar a linha do alicate que se quebrou o que fazer A tentativa bvia seria alicate s Nn para apagar O in mas isso n o funciona E lembrando que a primeira parte do comando s nada mais do que uma busca ent o similarmente o endere o cabonde borracha n o vai funcionar como esperado 79 Dominando o SED Quebra de linha Como apagar uma quebra de linha juntando duas linhas Temos um problema n o podemos casar a quebra de linha ent o como apag la Precisaremos usar de engenhosidade aqui Lembra do comando x Ele gruda a pr xima linha no padr o separando a da linha atual por um n Ent o ap s aplicado o comando x temos duas linhas juntas numa string s e surpresa esse in pode ser usado na busca Ent o para nosso exemplo acima quando estivermos na linha do alicate grudaremos a pr xima linha apagaremos o in e pronto A quebra de linha foi embora Acompanhe promptS sed alicate N s An arquivo uma serra pequena um alicate de bico com cabode borracha uma chave de fenda pa Quase isso Simplesmente apagar o n vai grudar as duas palavras ent o o trocaremos por um espa o ao inv s disso promptS sed alicate N s n arquivo uma serra pequena um alicate de bico com cabo de borracha 80 Dominando o
16. 10 sed s 10 1 cut d f4 sed s V MAN N2 tr A Z a z sed y ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 111 Dominando o SED Cumbuca tr a z A Z sed y abcdefghijkImnopgrstuvwxyz ABCDEFGHIJKLMNOPORSTUVWXYZ tr s sed s g tr d 012 sed H d g s n g wc 1 sed n uniq sed x G n 1 d g rev sed n G s n amp 2 1 D s basename sed s dirname sed s cp sed w arquivo novo 112 Dominando o SED Agradecimentos Agradecimentos Em Outubro de 2002 alguns amigos toparam ajudar com o livro Eu lhes mostrei o texto e eles sugeriram melhorias arrumaram erros ortogr ficos e fizemos uma grande discuss o que resultou no aumento de qualidade do conte do A esse grande time meu MUITO OBRIGADO e Eliphas Levy Theodoro rico DyNaMiTe e Fernando Braga e Gentil de Bortoli J nior e Julio Cezar Neves e Leslie Harlley Watter e Luciano Esp rito Santo e Marcelo Pereira e Rodrigo Stulzer e Rubens Queiroz de Almeida e Thobias Salazar Trevisan 113
17. Como guardar os comandos sed num arquivo script medida que vamos evoluindo no aprendizado os comandos sed v o ficando cada vez mais extensos e complicados Ficar sempre redigitando tudo na linha de comando torna se um inc modo Seria interessante poder guardar os comandos num arquivo Nesse momento em que sentimos a necessidade de algo mais pr tico presenciamos nossa pr pria evolu o a passagem da inf ncia para a adolesc ncia no aprendizado do sed Ao inv s de fazer um comando sed agora vamos fazer um script sed com bastante comandos e estruturado Na fase adulta de aprendizado podemos ainda evoluir para um programa sed que ao inv s de editar textos os domina O simples fato de colocar os comandos sed num arquivo ao inv s de digit los na linha de comando muda alguns aspectos da brincadeira divertida de manipular texto Vamos aos detalhes s rdidos A primeira vantagem que n o precisamos mais nos preocupar com o shell tendo que proteger os comandos entre aspas para n o serem confundidos e interpretados Dentro do arquivo podemos colocar quaisquer caracteres despreocupadamente 56 Dominando o SED Arquivo Mas no mesmo ponto que temos a primeira desvantagem perdemos o contato com o shell nosso aliado poderoso Com suas vari veis opera es e comandos o shell complementa onde o sed limitado Quando colocamos os comandos sed num arquivo eles tornam se est ticos e a interativi
18. MPW Shell no Windows MS DOS 50 Dominando o SED Arquivo Como gravar o resultado no pr prio arquivo original Olhe ali para aquela c mera voc acaba de cair na pegadinha de gravar no mesmo arquivo Quem nunca apagou um arquivo importante para descobrir que o UNIX Linux n o tem undelete nem Lixeira e Quem nunca perdeu um HD inteiro para descobrir a import ncia do becape Quem nunca apertou o bot o Ok na mensagem Deseja sair sem salvar as altera es e teve que redigitar o documento e Quem nunca deu um rm rf tmp lixo OU UM rm rf txt OU UM rm rf Pois amigo brincadeiras parte fazer cacas irrevers veis em inform tica t o f cil que uma simples apertada na tecla Enter na hora errada pode destruir um dia de trabalho ou v rios Essa introdu o descontra da serve para aliviar o peso da culpa daqueles que j descobriram pelo jeito dif cil que gravar o resultado no mesmo arquivo pode ser cruel amp 51 Dominando o SED Arquivo Problema inicial Como j visto utiliza se o redirecionamento do shell para gravar o resultado do sed num outro arquivo Mas muito comum ao se editar um determinado arquivo querer gravar estas altera es no pr prio arquivo original Faz sentido n o faz Ent o a tentativa bvia e intuitiva o cl ssico tiro no p promptS sed comandos texto txt gt texto txt Al m de n o dar certo todo o conte do original do arquivo ser
19. S min sculas Em sed seria ap s ler a linha do arquivo texto levante sua caixa y abcdefghijkImnopgrstuvwxyz ABCDEFGHIJKLMNOPORSTUVWXY Z procure o padr o e execute os comandos MEU PADRAO Mas para al vio dos amantes do sed os programadores da GNU inclu ram um modificador especial de endere o 1 de Ignore case a partir da vers o 3 01 beta1 A sintaxe pode parecer estranha mas acostuma No endere o basta colar o modificador 1 logo ap s fechada a segunda barra delimitadora prompt sed root I d texto txt E tamb m no comando s temos o mesmo modificador 1 que pode ser inclu do no final junto com os outros modificadores j existentes g p w OU n meros Dessa maneira a primeira parte do comando que nada mais sen o um endere o pesquisada ignorando a caixa das letras Exemplo promptS sed s root administrador Ig texto txt 108 Dominando o SED Cumbuca Cumbuca Aqui aquela se o que voc vai ler agora apressadamente e depois quando precisar vai voltar para procurar um exemplo 109 Dominando o SED Cumbuca Exemplos teis Olha n o que eu seja pregui oso eu j aprendi bastante coisa de sed j me viro sozinho manjo de fazer endere os de fazer scripts sed e tudo mais Mas ser que n o dava pra colocar num cantinho a uns exemplinhos mastigados daquelas tarefas bem rotineiras e chatas Apagar todas as tags HTML Obter o n mero da linha o
20. ada linha s o irrelevantes para o sed temos a liberdade de estruturar as linhas como preferirmos podendo utilizar espa os e TABs Note tamb m que como separamos os comandos um por linha n o precisamos mais colocar o ponto e v rgula entre eles Cada um tem a liberdade de nomear os scripts sed como bem entender n o h um padr o ou norma Mas para facilitar a identifica o de seu conte do aconselh vel utilizar a extens o sed Este script de exemplo poderia se chamar seu madruga no brasil avi mas bloco sed muito mais descritivo e apropriado n o concorda amp 59 Dominando o SED Arquivo Como utilizar um script sed Agora que j sabemos como colocar os comandos sed num arquivo tornando os parte de um script sed resta saber como fazer o sed utilizar este script Basta usar a op o f ou file seguida do nome do script que serve para para dizer ao sed Use os comandos que est o dentro deste arquivo Veja promptS sed f arquivo sed texto txt Essa op o pode ser usada mais de uma vez na linha de comando ent o v rios scripts podem ser usados no mesmo comando promptS sed f arql sed f arq2 sed f arq3 sed texto txt O sed os interpreta sequencialmente ou seja a ordem de coloca o dos v rios f tem import ncia Se o exemplo anterior fosse trocado para promptS sed f arq3 sed f arq2 sed f arql sed texto txt o resultado n o ser o mesmo 60 Dominando o SED Arquivo
21. as como extra o de dados onde se busca apenas a primeira ocorr ncia e nada mais o comando de interrup o de processamento pode ser utilizado A id ia simples colocar num bloco o comando desejado e a interrup o Como a interrup o s pode ser executada uma vez est feito nosso condicional para obter apenas o primeiro Exemplo extrair do arquivo apenas a primeira linha com a letra o promptS sed n o f p q numeros txt dois Com a op o n silenciamos a sa da do sed Na linha com o executado um Print para mostr la e um Quit para sair 27 Dominando o SED Endere o A mesma t tica utilizada para extrair os cabe alhos de um e mail que ficam sempre no in cio separados do corpo da mensagem por uma linha em branco sed q email txt Traduzindo Ao encontrar a primeira linha em branco do arquivo saia 28 Dominando o SED Endere o Como endere ar a primeira ocorr ncia de um trecho Um endere o duplo tamb m est sujeito s mesmas regras de um endere o normal ent o um trecho de texto pode se repetir v rias vezes e o seu comando ou bloco ser executado tantas vezes quantas necess rias Assim sendo o comando a apagar TODOS os trechos do texto que estiverem delimitados por par nteses podendo o par ntese que fecha estar numa linha diferente do que abre Para limitar esse endere o ao primeiro trecho encontrado usamos a mesma t tica de ancora
22. baixar um tar gz e compil lo Windows DOS Usu rios de Windows t m duas op es para usar o sed e SED EXE no DOS e sed no Cygwin Dominando o SED Instala o O sed nasceu no UNIX mas v rias vers es do programa foram feitas para MS DOS devido falta de uma ferramenta semelhante nesse sistema O nome gen rico sep ExE mas tamb m pode ser encontrado como sED ZIP Caso acompanhe documenta o A instala o n o tem segredo Basta copiar o arquivo seD EXE para um diret rio que esteja no PATH do seu MS DOS Lugares comuns s o c windows C WIN OU C WINNT Para quem gosta de UNIX Linux aconselh vel instalar o Cygwin http aurelio net cygwin uma solu o completa com ferramentas UNIX que roda no Windows Com um clique voc tem acesso a uma janelinha preta com sed bash cat tr grep find vi e dezenas de outros programas Vale conferir Dominando o SED Endere o Endere o Prepare se Respire fundo Abra sua mente para receber conceitos novos empolgantes e poderosos Para come ar deixemos claro que endere o n o um comando mas sim o seu contexto o elemento que diz exatamente em quais linhas um comando ou bloco deles dever ser aplicado O QUE FAZER gt comando ONDE FAZER gt endere o O endere o algo simples se seus problemas forem simples Mas quando se quer resolver algo realmente cabeludo com sed o endere o tamb m pode se tornar um monstro daqueles que
23. caixa de um texto Ah Em vers es mais recentes os colchetes n o s o mais necess rios ent o tr A Z a z basta O sed possui tamb m um comando de tradu o de caracteres o y Essa tradu o feita caractere a caractere por exemplo sed y aeo arquivo txt Este comando trocar as letras com acento agudo pela pr pria letra sem acento Diferente do comando s que troque isso por aquilo o y para cada letra daqui troque a pela de l Ent o no comando anterior estamos dizendo ao sed troque por a troque por e troque por o Outra diferen a do s em que se tem controle sobre o n mero de substitui es que ser o feitas com o y tudo ou nada ele converte todas as letras da linha que estiverem no comando Veja prompt echo AAAABBBAAAA sed y AB ab aaaabbbaaaa 94 Dominando o SED MAI SCULAS min sculas E o y sempre assim em pares Por isso sempre deve haver o mesmo n mero de letras na primeira e na segunda parte do comando sen o o sed acusar erro Outro detalhe que o y por causa dessa paridade s aceita caracteres literais Nada de express es regulares ou qualquer outro caractere especial Ent o o comando similar ao tr inv lido sed y A Z a z ERRADO Este comando diz troque A por a troque por troque Z por z e s Para conseguirmos converter de mai sculas para min sculas temos que colocar todas as letras uma por uma Sim isso mu
24. dade direta com o shell perdida Uma outra vantagem da utiliza o do arquivo que podemos separar melhor os comandos colocando um em cada linha Podemos fazer inclusive o alinhamento estruturado indentation para que os blocos de comandos fiquem mais visuais E mais agora podemos colocar tamb m coment rios Desprezado por muitos eles s o uma das partes mais importantes de um programa S quem j precisou dar manuten o num c digo complexo e sem coment rios ou mal comentado sabe a falta que eles fazem E por favor pelo seu pr prio bem e dos que um dia precisarem dar manuten o num script sed de sua autoria encha o de coment rios O sed especialmente abstrato e desafiador com seus comandos de apenas uma letra sem vari veis e muitas express es regulares A falta de coment rios pode deixar um script inutiliz vel se ningu m souber como atualiz lo O caractere que precede os coment rios num script sed aquele que cada um chama de um jeito 4 Gradinha cerquilha sustenido jogo da velha hash Script sed shell alinhamento coment rios legibilidade 57 Dominando o SED Arquivo Vamos relembrar o exemplo de endere ar entre duas linhas excluindo as promptS sed um cinco um b cinco b s numeros txt um endere o com um bloco de comandos dentro das chaves No bloco est o tr s comandos separados por ponto e v rgula H uma certa dificulda
25. dados em arquivos ent o o sed precisa ter a capacidade de ler e gravar linhas em arquivos Podemos ainda querer guardar todo o resultado da edi o feita pelo sed em um arquivo Ou ainda podemos querer colocar nossos comandos sed num arquivo pois eles est o ficando muito complicados Feito isso podemos at torn lo um arquivo execut vel que chama o sed automaticamente para interpret lo Ufa Para um programa que edita somente fluxos de texto at que temos v rios detalhes para ver no assunto Arquivo n o amp 47 Dominando o SED Arquivo Como gravar o resultado num arquivo Apesar do sed ter sido concebido como um filtro que repassa o fluxo de texto para a tela do computador n s usu rios tamb m temos necessidades de armazenamento desse fluxo Seja para consulta posterior para edi o de arquivos e n o fluxos ou para registros e extra o de dados importante guardamos o texto processado pelo sed em um arquivo Mas sendo o sed um filtro de fluxos o que ele entende de arquivos Quase nada Por isso a solu o desse problema est um pouco mais embaixo no shell que o ambiente onde o sed executado A tela chamada de sa da padr o do sed o caminho natural que o fluxo segue ap s ser processado Mas como essa sa da passa tamb m pelo shell antes de ir para a tela ele tem meios de desvi la e mand la para um arquivo Esse desvio chamado de redirecionamento e o caractere util
26. de em identificar e entender as partes desse comando por estar tudo misturado numa nica linha Vamos coloc lo num arquivo e ver se melhora meu primeiro script sed ei isso um coment rio vamos delimitar um bloco de linhas endere o entre a linha que cont m um e a linha que cont m cinco um cinco nesse ponto do script s chegar o as linhas que estiverem entre um e cinco incluindo elas pr prias se for a linha que cont m um v at o final do script um b se for a linha que cont m cinco v at o final do script cinco b nesse ponto do script as linhas um e cinco j n o chegam mais ent o somente para as outras ser aplicado o pr ximo comando coloque um no come o da linha 58 Dominando o SED Arquivo s fim do bloco fim do script Tudo bem os coment rios est o exageradamente explicativos mas a id ia mostrar o qu o did tico pode ficar seu script sed Com certeza ficou 78 mais f cil de ler N o s o irritantes essas estat sticas subjetivas e absurdas que ouvimos diariamente not vel a diferen a do entendimento entre este script e a linha de comando anterior onde os comandos estavam todos grudados Moral da hist ria fica a crit rio do programador fazer um c digo pequeno e indecifr vel ou extenso e leg vel Ambas as formas t m suas audi ncias Como os espa os em branco no come o de c
27. de t o feios quem olha pensa Tomara que eu nunca precise fazer manuten o nisso Para facilitar podemos fazer uma analogia com os endere os de nossas casas compostos por nome da rua n mero cidade e CEP O comando sed seria o carteiro que baseado no endere o escrito na carta deve encontrar o local correto Dominando o SED Endere o Sabemos que quanto mais detalharmos o endere o colocando todos os dados corretamente mais f cil para o carteiro encontrar o destino de nossa carta Por m na falta do CEP ou do n mero da casa a carta n o chegar ao seu destino por causa do endere o incorreto No sed assim que acontece Um endere o correto indispens vel para que o comando seja aplicado no lugar certo Assim torna se essencial para o programador ao escrever um comando sed especificar o endere o com exatid o e sem ambiguidades O dom nio do endere o diferencia os gurus dos gafanhotos Fa amos um mergulho profundo no assunto para dissecar todas as formas de utiliza o e conhecer as solu es para os problemas mais rotineiros H tr s tipos de endere os 1 Endere o pelo n mero da linha 2 Endere o pelo conte do da linha 3 Endere o m ltiplo que abrange mais de uma linha 10 Dominando o SED Endere o Um endere o sempre aponta para uma linha inteira A primeira coisa que deve ser assimilada sobre o conceito de endere o que ele sempre referencia uma linha inteira
28. do se aplica a todas as linhas menos aquela Veja como apagar todas as linhas do arquivo menos a linha 5 promptS sed 5 d arquivo O modificador de endere o o respons vel pela invers o e essa l gica s avessas pode confundir Uma leitura desse comando poderia ser Na linha 5 n o a apague Para facilitar o entendimento correto de sua fun o leia o comando de maneira inversa usando a palavra exceto ou menos Assim Apague TODAS as linhas EXCETO a linha 5 O mesmo vale para um bloco de comandos e para um endere o duplo padr o p d padr ol padr o2 p d 24 Dominando o SED Endere o Com blocos a leitura fica Aplique os comandos do bloco em TODAS as linhas EXCETO as do endere o Assim sendo fica f cil mostrar apenas um trecho de texto e apagar todo o resto promptS sed dois cinco d numeros txt dois tr s quatro cinco Em outro exemplo vamos emular o comando neaa do UNIX que imprime as 10 primeiras linhas de um arquivo Uma das possibilidades seria esta sed 11 d apague da linha 11 at o fim do arquivo Ou ent o usando o modificador podemos inverter a l gica e fazer assim sed 1 10 d apague todas as linhas EXCETO da linha 1 at a 10 Pode parecer estranho e pensar invertido mas voc se acostuma amp 25 Dominando o SED Endere o Como endere ar a primeira ocorr ncia de um padr o Como j vimos o end
29. ecisamos separar os comandos usando a op o e Mas por que isso Bem lembra do detalhe dos 5 minutos Pois Na defini o de quais caracteres seriam v lidos para um nome de arquivo o ponto e v rgula foi inclu do Pense um pouco sobre o efeito colateral disso 69 Dominando o SED Arquivo Tudo bem o ponto e v rgula um caractere que pode aparecer no nome de um arquivo Mas ele tamb m o caractere que delimita onde termina um comando sed e come a outro E voc acha que h uma maneira especial de colocar o ponto e v rgula no nome do arquivo para que o sed n o confunda com o separador de comandos Ha ha N o Com essa implementa o descuidada o resultado no m nimo inc modo Nos quatro exemplos seguintes o trecho em destaque o nome do arquivo que o comando r de cada um tentar ler sed 1 r cabecalho html r rodape html meio html gt pagina html sed r tmp arquivo txt s abc XXX 5d texto txt sed r citemplarquivo txt 10q texto txt sed r arquivo txt 1 End Id texto txt Entendeu a dificuldade O ponto e v rgula que deveria separar os comandos entendido como parte do nome do arquivo ent o n o h caractere que sirva para terminar esse nome Com isso o sed considera o nome do arquivo tudo o que vier depois do r at o fim da linha 70 Dominando o SED Arquivo Para contornar essa dificuldade o comando r assim como o seu irm o o comando w deve e
30. eeeeeaeaeanaeaaaeaaaaeanaa 89 Como substituir alguma coisa por uma quebra de linha 92 MAINSCULAS min sculas ssa ns a a aaa A a E 93 Como deixar todo o texto em caixa alta ou baixa eceeeeeererereree see rerena 94 Como inverter a caixa de todas as letras sseeeeeeeeeeerenereee mer cencea een cencenneeso 98 Como levantar a caixa da primeira letra de cada linha cissieisssisesererenrena 99 Como levantar a caixa da primeira letra de cada palavra iseseseereeeeemeeeess 103 Como ignorar a diferen a de mai sculas e min sculas iiieeeeeeeeererereeeserenoa 106 CUMDU Aa siso s dormi ao do SLi msad a N n nr asda a nal a Ss baia Ss ei Dad aus began 109 Exem plas UL eis sacas E an SSD CE qa ad O a CA Ra 110 Emulando comandos UNIX Linux isiss oiii screen nene rare re ne re aiaei 111 A rad ciMeEntO ERR Rs DOSE O IRES RSS O PO ND ERA E RD E UR 113 Dominando o SED Instala o Instala o Antes de mais nada o site http sed sf net a fonte de informa o mais atualizada sobre onde encontrar o sed para as v rias plataformas suportadas Consulte o UNIX Linux Mac OS X Espera a voc vai me dizer que tem um UNIX Linux e n o tem sed instalado nele Conta outra amp D Para atualizar uma vers o existente o procedimento o mesmo do de outros programas e isso pode requerer a instala o de um RPM um pacote deb ou
31. eira mais tradicional conservadora e garantida que com certeza funcionar em todas as vers es de sed existentes especificar uma a uma as possibilidades de cada letra do padr o utilizando express es regulares Veja promptS sed J l 1 d bla txt 106 Dominando o SED MAI SCULAS min sculas Usando os colchetes explicitamos as alternativas poss veis para cada posi o de caractere do padr o Esta claro n o uma solu o pr tica pois sempre precisamos saber de antem o qual o padr o a ser procurado para colocar as alternativas Mas se este padr o mut vel ou pode ser definido pelo usu rio preciso pr process lo colocando automaticamente os colchetes e todas as alternativas antes de pass lo ao sed Algo como coloque o padr o todo em min sculas para cada letra do padr o componha a pr pria letra a letra em caixa alta J imaginou todo esse trabalho s para pesquisar um texto Infelizmente para uma grande parte das vers es de sed existentes isso ou Se a sa da puder ser toda em min sculas ou mai sculas outra t tica antes de mais nada usar o comando y para converter a linha toda do arquivo de texto todo para mai sculas e usar o padr o tamb m em mai sculas Essa t tica muito usada em programa o para comparar conte do de vari veis por exemplo if toupper comando SELECT then 107 Dominando o SED MAI SCULA
32. eis cinco quatro tr s dois um E trocando o tac do comando anterior por este em sed ficamos com sed 1 G h d numeros txt sed 1 0 o d sed 1 G h d 31 Dominando o SED Endere o Feio muito feio E esse m todo de invers o complica tudo pois o script a ser aplicado ao trecho caso seja necess rio mexer com mais de uma linha tamb m precisa trat las de maneira invertida Em algumas situa es onde se tem uma sequ ncia certa de linhas inverter a l gica pode ser impratic vel Mas com exce o dessa t tica n o h muitas alternativas Dependendo do que precisamos fazer com o padr o podemos usar outras abordagens Por exemplo se precisarmos simplesmente imprimir na tela a linha da ltima ocorr ncia podemos usar o sed duas vezes prompt sed o d numeros txt sed S d cinco O primeiro obt m todas as linhas que cont m o padr o e o segundo mostra apenas a ltima linha apagando todas as outras Um comando UNIX similar seria prompt grep o numeros txt tail 1 Para fazer isso usando apenas um sed podemos utilizar o RESERVA para ir armazenando sobrescrevendo todas as linhas que cont m o padr o e quando chegarmos na ltima linha do arquivo mostramos o conte do do RESERVA 32 Dominando o SED Endere o promptS sed o h d g numeros txt cinco Para entender melhor guarde sobrescrevendo no RESERVA as linhas que cont m o o h
33. ere o pode servir para mais de uma linha Ap s encontrar a primeira ocorr ncia do padr o e executar o comando o sed continua lendo o arquivo O comando ent o ser novamente aplicado em todas as outras linhas em que o padr o for encontrado Mas e para endere ar apenas a primeira ocorr ncia do padr o e n o as restantes Aqui precisamos de um pouco de criatividade A id ia especificar uma rea de atua o para o comando para que seu endere o somente seja v lido nesta rea Para nosso objetivo a rea deve come ar no in cio do arquivo e ir at a primeira linha onde o padr o for encontrado Ei j sabemos como fazer isso basta endere ar 1 padr o comandos 5 Usando a linha 1 como primeiro endere o conseguimos ancorar o bloco de comandos no in cio do arquivo Dessa maneira garantimos que apenas a primeira ocorr ncia do padr o est contida neste endere o Definida nossa rea de atua o agora ficou f cil Por exemplo para modificar somente a primeira linha que contenha a letra o no nosso arquivo de n meros 26 Dominando o SED Endere o promptS sed 1 0 0 s numeros txt um dois tr s quatro cinco seis Vamos ler este comando Dentro da rea que vai da primeira linha at a linha que conter a letra o fa a se for uma linha com o adicione no come o H tamb m uma t tica mais simples que funciona em casos espec ficos Para taref
34. espa os em branco por quebras de linha fica trivial promptS sed s An g texto txt 92 Dominando o SED MAI SCULAS min sculas MAI SCULAS min sculas A princ pio parece ser um assunto t o bobinho que n o tem muito o que falar mas a experi ncia mostra que o assunto mai sculas min sculas sempre vai render problemas e solu es diversos Vamos fazer um apanhado de todos os t picos que envolvem o assunto e n o deixar nem uma sombra de d vida no caminho Vamos come ar com a nota o que pode ser novidade para muitos Como vamos falar de tipos de caracteres e convers es entre eles a linguagem tipogr fica serve para definirmos os termos que identificam as a es e elementos do maravilhoso mundo das letras Ent o vamos l letras em mai sculas s o letras com caixa alta e em min sculas caixa baixa Ent o inverter a caixa o nome que se d troca de mai sculas por min sculas e vice versa Destes termos tamb m podemos derivar levantar a caixa que seria a maiusculiza o toupper e abaixar a caixa seria a minusculiza o tolower 93 Dominando o SED MAI SCULAS min sculas Como deixar todo o texto em caixa alta ou baixa Uma tarefa das mais b sicas e corriqueiras quando se manipula textos precisar padronizar a caixa das letras convertendo todas as palavras para caixa alta ou baixa A ferramenta UNIX que faz isso O tr que possui o cl ssico tr A Z a z para abaixar a
35. este comando ficou um pouco melhor que o anterior Detalhes A linha gravada imediatamente n o espera o fim do script como o r e O arquivo sempre truncado e seu conte do anterior perdido O arquivo sempre truncado mesmo que o comando w n o seja executado O nome do arquivo aceita ponto e v rgula ent o o comando deve estar separado dos demais e Mas antes dos detalhes vamos ao uso Por exemplo se voc quer gravar num arquivo o resultado de uma busca por linhas que cont m a palavra estorvo O comando UNIX seria promptS grep estorvo texto txt gt estorvos txt E o similar em sed 74 Dominando o SED Arquivo promptS sed n estorvo w estorvos txt texto txt Traduzindo Para cada linha do arquivo texto txt que encontrar a palavra estorvo grave a no arquivo estorvos txt Como irm o do comando r o wW sofre do mesmo problema da especifica o do nome do arquivo e o ponto e v rgula Isso quer dizer que se deve usar a op o e para separar os comandos ou quebrar a linha quando utiliz lo Como no exemplo anterior o w era o nico comando a separa o n o foi necess ria Uma outra utilidade de se gravar dados num arquivo a de servir como um espa o auxiliar caso voc j esteja usando o RESERVA e ainda precisa de outro cantinho para guardar dados durante a execu o do script Um exemplo cl ssico se processar um documento estruturado com t tulos e se es e no final imprimir
36. gem com a primeira linha usada no t pico anterior 1 4 d Traduzindo Do come o do texto at a primeira linha que contiver apague tudo que estiver entre os par nteses inclusive eles pr prios 29 Dominando o SED Endere o Como endere ar a ltima ocorr ncia de um padr o Entramos agora num t pico complexo Endere ar a primeira ocorr ncia de um padr o ou trecho algo relativamente f cil Mas a ltima n o t o simples promptS sed o o d numeros txt um tr s seis A tentativa bvia falha porque o sed l as linhas de cima para baixo ent o o endere o especificado acaba significando Procure da primeira linha que tiver a letra o at a ltima linha do texto Para fazermos um s primeira ltima com este significado temos algumas alternativas A mais f cil por m exclusiva de quem possui o comando tac que imprime um arquivo da ltima para a primeira linha pode ser promptS tac numeros txt seis cinco quatro tr s dois um 30 Dominando o SED Endere o prompt tac numeros txt sed 1 0 o d tac um dois tr s quatro seis Ent o invertendo a ordem das linhas aplicamos o mesmo conceito de ancorar pela primeira linha do arquivo que na verdade a ltima e ent o basta desinverter o arquivo aplicando tac novamente Quem n o possui o tac pode emul lo com o sed promptS sed 1 G h d numeros txt s
37. ha i essere nene nerennea 13 Como endere ar a linha que cont m determinada palavra iiseeeeseeeseeesemereees 14 Como aplicar v rios comandos em um mesmo endere o isiieieea 17 Como endere ar um trecho entre duas linhas incluindo as iis iscas 19 Como endere ar um trecho entre duas linhas excluindo as ssiseeeeeeereseess 21 Como negar um endere o n o aplicando comandos nele serranas 24 Como endere ar a primeira ocorr ncia de um padr o ieeeeeeeeesereneeeeeeaeeenans 26 Como endere ar a primeira ocorr ncia de um trecho seeeresererrerereererenenana 29 Como endere ar a ltima ocorr ncia de um padr o eeeteseeererererererereeranana 30 Como endere ar a N sima ocorr ncia de um padr o ieeeeeseeeseeereeeaeeeneentes 34 Tem uma barra no padr o que procuro e agora iieeeeeeeeeee encena rare neeamensees 35 Como usar outro delimitador fora a barra isis sister renina rara re renan 37 O que acontece com endere os inv lidos eee eeeenaemeaaereaaa amena 40 E se eu colocar um endere o vazio como 2 eeeeeeeerere era cee aee cen ceara re rca naes 42 E se eu n o colocar nenhum endere o siena enaaana na naa aaa a nana 44 Detalhes s rdidos sobre endere os ice ceneneearan aaa aeaaaaenaananaa 45 ARQUIVO aas
38. i 15 linhas E agora a d vida que assola a humanidade E se eu colocar um endere o inv lido a resposta depende Se for um endere o simples de uma linha o comando simplesmente n o vai ser executado pois nenhuma linha satisfez o padr o Se for um endere o de um trecho entre duas linhas o resultado diferente caso o endere o inv lido seja o primeiro ou o segundo Vamos acompanhar um exemplo utilizando a palavra prego COMO padr o no nosso arquivo de verduras promptS sed prego d verduras txt alface cenoura couve nabo vagem promptS sed 1 prego d verduras txt prompt 40 Dominando o SED Endere o No primeiro exemplo era para apagar da linha que tivesse prego at o final Como nenhuma linha tinha prego O primeiro endere o falhou e nada foi apagado J no segundo exemplo era para apagar da primeira linha at a linha que tivesse prego A primeira linha foi encontrada ent o o comando a vai ser aplicado at achar o segundo endere o Mas como n o tem prego no arquivo o comando vai sendo aplicado at bater na ltima linha como dizer Ningu m me mandou parar ent o continuei 1 endere o inv lido endere o inv lido nada acontece 2 endere o inv lido endere o incompleto vai at o final 41 Dominando o SED Endere o E se eu colocar um endere o vazio como Um endere o vazio referencia o ltimo endere o pesquisado Essa uma funcionalidade m
39. is por extenso promptS cat numeros txt um dois tr s quatro cinco seis Supondo que se queira destacar tudo entre as linhas que contiverem um e cinco incluindo as pr prias linhas delimitadoras temos 21 Dominando o SED Endere o promptS sed um cinco s numeros txt um dois tr s quatro cinco seis Mas se quisermos excluir as linhas delimitadoras devemos trat las individualmente dentro de um bloco promptS sed um cinco um b cinco b s numeros txt um dois tr s quatro cinco seis Mais detalhadamente entre a linha um e a linha cinco se for a linha um salte para o fim do script e um cinco 4 processe a pr xima linha ou seja n o fa a nada nesta Eid um b cinco b se for a linha cinco salte para o fim do script e processe a pr xima linha ou seja n o fa a nada nesta nos outros casos coloque no come o da linha s 22 Dominando o SED Endere o Ent o o comando b sozinho funciona como um pulo uma exce o que n o deixa o processamento chegar at o s nas linhas especificadas 23 Dominando o SED Endere o Como negar um endere o n o aplicando comandos nele Assim como podemos definir um endere o para aplica o de um comando tamb m podemos determinar que um comando n o seja aplicado nesse endere o ou seja que o coman
40. iss 39 COMM g 40 PATT num ndois ntr s nquatro ncinco nseis 41 HOLD Anumi ndoisintr s nquatroincincolnseiss 42 COMM s n g 43 PATT um dois tr s quatro cinco seis 44 HOLD Anumindoisintr s nquatroincincoinseiss 45 um dois tr s quatro cinco seis 90 Dominando o SED Quebra de linha Ao chegar na ltima linha ela tamb m ser juntada no reserva mas agora o condicional sia faz com que o a n o seja aplicado ent o o script pode continuar finalmente para o pr ximo comando g L39 Com ele recuperamos todo o conte do do nosso estoque de linhas e o pr ximo comando s se encarrega de trocar todos note o modificador s 9 os n do padr o por espa os de uma s vez L43 Resumindo estocamos as linhas no reserva pegamos de volta e formatamos 91 Dominando o SED Quebra de linha Como substituir alguma coisa por uma quebra de linha Uma tarefa comum voc ter um arquivo com v rios dados separados por algum delimitador qualquer e querer que cada um dos dados fique em uma linha ou seja trocar o delimitador por uma quebra de linha Mas com outras vers es do sed que n o entendem este escape a quebra de linha deve ser inserida literalmente e deve ser escapada promptS sed s A promptS g texto txt No sed da GNU a partir da vers o 3 02 80 foi adicionado o n como escape v lido dos dois lados do comando s Com isso a tarefa de colocar cada palavra numa linha isolada ou seja trocar
41. ito chato sed y ABCDEFGHIJKLMNOPORSTUVWXYZ abcdefghijkImnopgrstuvwxyz Essa minhocona far o servi o de deixar todo o texto em caixa baixa Ser que voc est bem atento Apesar de j estar um comando gigantesco n o est faltando nada a n o claro Est o faltando nossas queridas letras acentuadas Se n o as colocarmos continuar o em caixa alta mesmo ap s a convers o Respire fundo vamos l sed y ABCDEFGHIJKLMNOPORSTUVWXYZ AAA E O U abcdefghijkImnopgrstuvwxyz aaa Bi od i 95 Dominando o SED MAI SCULAS min sculas Ufa Quanta coisa para resolver algo aparentemente t o simples Caso tenhamos nos perdido no meio do caminho e olha que isso muito f cil de acontecer o sed avisar sed y FGHI fg sed e expression 1 char 10 strings for y command are different lengths Para fazer o caminho inverso deixando tudo em mai sculas basta inverter as partes do comando sed y abcdefghijkImnopgrstuvwxyz aaa 8 1 d ii ABCDEFGHIJKLMNOPORSTUVWXYZ AAA E OUU Uma dica muito mas muito boa para a utiliza o do y usar outro delimitador Assim como para endere os e para o comando s podemos usar qualquer caractere ASCII como delimitador do comando Ent o ao inv s da barra use a quebra de linha como delimitador sed y abcdefghijkImnopgrstuvwxyz aa ABCDEFGHIJKLMNOPORSTUVWXYZAAAA 68160 RI O Assim facilita muito j ficando visualmente not vel caso as duas
42. izado para represent lo o maior que gt Informatiqu s Precisamos redirecionar a sa da padr o 48 Dominando o SED Arquivo Ent o aplicamos os comandos sed desejados no texto e redirecionamos o resultado dessa edi o para um arquivo promptS sed comandos texto txt gt texto alterado txt Este redirecionamento chamado destrutivo pois caso j exista o arquivo texto alterado txt ele ser truncado Truncar em informatiqu s significa cortar apagar excluir remover limpar zerar ou seja o conte do anterior do arquivo ser perdido Caso o arquivo ainda n o exista o shell o criar A outra op o usar o redirecionamento incremental representado por dois sinais de maior que gt gt Ao contr rio do destrutivo se o arquivo j existir seu conte do original ser preservado e o texto novo ser anexado ap s a ltima linha Caso o arquivo ainda n o exista o shell o criar promptS sed comandos texto txt gt gt texto alterado txt promptS sed outros comandos texto txt gt gt texto alterado txt Memorizar f cil 49 Dominando o SED Arquivo Usando acontece gt o arquivo sempre zerado gt gt o arquivo vai crescendo crescendo A maioria dos ambientes shell conhecidos utiliza a nota o do gt e gt gt para redirecionamentos aqui v o alguns deles no UNIX Linux sh ash bash ksh no Macintosh
43. letra isolada agora podemos levantar sua caixa tranquilamente com a famosa minhocona y abcde ABCDE Beleza ent o agora temos que voltar o resto da linha que est no RESERVA mas antes temos que tamb m retirar a primeira letra dela pois ela uma c pia da linha original lembra Devemos trocar os registradores de lugar e apagar a letra x s a z Agora temos em m os PATT nidos venceremos sS HOLD U Certo agora basta grudar o PADR O no RESERVA comando H e apagar o n que vai ficar entre eles H g s n 100 Dominando o SED MAI SCULAS min sculas Compondo o script todo fica h s M a z V A1 guarda c pia deixa s a primeira letra y abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ levanta a caixa x s a z arranca a primeira letra da c pia H g s n remonta a linha Sem querer ser chato mas sendo esse script ainda n o 100 funcional At aqui assumimos que geralmente a primeira letra da frase j est bem no come o da linha Mas como isso nem sempre verdade temos que melhorar nossa express o regular a z Antes da primeira letra podemos ter espa os em branco ent o prudente tamb m colocar esta condi o na express o a z E mas al m de espa os tamb m podem ter TABs ent o melhor garantir e fazer blank a z E o monstro vai crescendo Sendo mais chato ainda e os acentos Temos palavras no portugu s que come
44. lho use outro programa Mas se o sed a nica op o ou se S amp M significa algo para voc vamos l Para quebrar a linha em cada palavra temos um carinha muito til que o 1 lt que representa um in cio de palavra ent o basicamente trocamos um in cio de palavra por uma quebra de linha Na l ngua do sed isso uma palavra por linha sed s lt g 103 Dominando o SED MAI SCULAS min sculas Como o segundo sed j temos j podemos testar os dois primeiros passos prompt echo eu nunca farei isso sed f uma palavra por linha sed sed f JL inha sed Eu Nunca Farei Isso E claro para juntar todas as linhas h v rias op es descritas no t pico Como apagar todas as quebras de linha deixando tudo numa s linha Colocando uma vers o compacta do la o com condicional de entrada temos junta linhas sed zi SIN s n ti O comando completo fica algo deselegante mas funciona prompt echo eu nunca farei isso sed f uma palavra por linha sed sed f _L_inha sed sed f junta linhas sed Eu Nunca Farei Isso Se poss vel bom colocar todos estes comandos dentro de um script shell e ent o voc ter quatro arquivos para fazer uma tarefa simples bin sh 104 Dominando o SED MAI SCULAS min sculas P alavra sh levanta a caixa da primeira letra de cada palavra sed f uma palavra por linha sed sed f JL inha sed sed f jun
45. licados a apenas uma linha por vez Mas se diretamente n o conseguimos endere los a um trecho como em 1 5 usando blocos n o h problema 1 54 e Os comandos que devem receber endere o s o 1 e 4 O por ser um inversor de endere os aplicando o comando exceto no endere o indicado e o que define um bloco de comandos a ser aplicado no endere o especificado Se n o tiver endere o o bloco ser aplicado para todas as linhas tornando desnecess rio o agrupamento e As linhas de in cio e fim de um trecho n o podem ser a mesma linha ent o mesmo que seu endere o tenha padr es id nticos como cebola cebola ser o necess rias duas linhas diferentes que contenham a palavra cebola para que este endere o seja encontrado Ent o um trecho sempre tem no m nimo duas linhas 45 Dominando o SED Endere o O m como identificador de quebra de linha no endere o s v lido ap s a aplica o do comando v que gruda linhas no PADR O separando as pelo n Do contr rio n o haver mais de uma linha no PADR O para se processar 46 Dominando o SED Arquivo Arquivo J vimos que o sed n o um editor de arquivos mas de fluxos de texto Como tal a sua fun o aplicar os comandos de edi o no texto e mostrar o resultado na tela Mas mesmo tendo seu funcionamento independente do conceito de arquivos o sed precisa lidar com eles pois n s humanos gostamos de arquivos Temos nossos dados guar
46. nde est a palava VERDE Remover todas as linhas em branco Remover todos os coment rios Comentar a linha que cont m a palavra VERDE Desacentuar um arquivo Juntar todas as linhas numa s Remover todos os colchetes Remover todos os colchetes e seu conte do Tirar caracteres de controle como 4 33 43m A Ctrl v ESC 110 s lt gt gt g VERDE d d d VERDE s y AKA e oouuc AAAAEEIOOUUCaaaaeei H Sid g s n g s s L s M 0 9 m u Dominando o SED Cumbuca Emulando comandos UNIX Linux A utilidade do sed s vezes supera os limites do palp vel Se imagine numa m quina que s tenha a instala o padr o do Windows um golpe duro um pesadelo ser privado de todas as suas ferramentas UNIX Linux que voc est acostumado a utilizar no dia a dia como trabalhar com os bra os amarrados Mas espere nem tudo est perdido Se voc conseguir colocar nessa m quina pelo menos o sed poder us lo para emular alguns dos seus comandos queridos Emular significa imitar simular ter comportamento id ntico Ent o instale o SED EXE DOS e corra para o abra o comando emula o P P pon PE TETE Cube aa oa A a DR a A A aa a a aon Enio cat sed tac sed 1 G h d grep sed padr o d grep v sed padr o d head sed 10q head 1 sed q tail sed e a e q N 11 D ba tail 1 sed d cut c
47. nder com as mais diversas mensagens de erro promptS sed tmp lixo bmp d arquivo sed e express o 1 caractere 2 n o h uma express o regular anterior promptS sed tmp lixo bmp d arquivo sed e express o 1 caractere 7 h caracteres sobrando ap s o comando prompt sed 31 12 2000 d arquivo sed e express o 1 caractere 5 comando desconhecido 1 As mensagens de erro do sed s o em geral curtas e esclarecedoras mas no caso de problema com o delimitador elas ficam especialmente obscuras Anote em algum canto de seu c rebro Se a mensagem de erro do sed alien gena confira os delimitadores O que aconteceu em todos os exemplos que o sed confundiu a barra normal dos padr es com a barra delimitadora do endere o O que temos que fazer aqui para que essas barras normais n o sejam interpretadas como delimitadoras escap las 35 Dominando o SED Endere o Segundo o Aur lio o outro um dos significados de escapar passar despercebido E exatamente isso o que precisamos fazer com que a barra n o seja considerada especial pelo sed Quem faz esta m gica a barra invertida que colocada antes de um caractere normal o escapa impedindo que o sed o considere um delimitador de endere o Em nosso caso a barra escapada fica Como dica geral sempre escape as barras normais do padr o evitando dores de cabe a Mas vamos voltar aos exemplos anteriores agora com a
48. o ao sed Para resolver esse problema temos um caractere especial de endere o o cifr o s que representa a posi o da ltima linha do arquivo Ent o f cil apagar a ltima linha promptS sed d arquivo Note que em sistemas UNIX o uso das aspas simples obrigat rio Sem elas o shell tentaria expandir a vari vel ga e o sed receberia um comando vazio 13 Dominando o SED Endere o Como endere ar a linha que cont m determinada palavra Embora seja pr tico e f cil endere ar diretamente pelo n mero da linha os problemas da vida real nos mostram que nem sempre temos o privil gio de saber exatamente em qual linha est o os dados procurados E quanto mais se trabalha com dados mais se aprende que n o bom confiar em posi es fixas porque elas raramente s o fixas de verdade Elas se mudam sem deixar telefone email amp Tendo em vista estas necessidades tamb m podemos definir endere os que sejam palavras ou trechos de uma linha Por exemplo hoje no lanche comeremos frutas que P RA N o odioso ter em livros t cnicos esses exemplos did ticos envolvendo bananas ma s e abacaxis N o repugnante o autor tratar os leitores como crian as de prim rio Seus problemas acabaram Nada de exemplos com frutas por aqui Hoje no lanche comeremos verduras e como somos modernos e informatizados nerds colocamos a lista de compras num arquivo 14 Dominando o SED Endere o
49. odo n o pr tico No sed podemos especificar dois endere os um de in cio e outro de fim para representar os limites de um trecho entre duas linhas Uma v rgula separa os dois endere os Ent o a tarefa anterior de apagar as linhas fica assim promptS sed 5 10 d arquivo Ou seja da linha 5 at a linha 10 apague tudo Lembre se por m que um endere o tamb m pode ser o cifr o s ou um padr o Ent o agora podemos misturar todos os tipos de endere o Veja os exemplos 19 Dominando o SED Endere o 1 couve da primeira linha at a linha que cont m couve 10 5 da linha 10 at o fim do arquivo couve S da linha que cont m couve at o fim do arquivo couve vagem da linha que cont m couve at a linha que cont m vagem 1 5 da primeira linha at a ltima ou seja todas Como pudemos notar o trecho casado inclui as linhas de in cio e fim do endere o Se n o era este seu objetivo veja o t pico seguinte 20 Dominando o SED Endere o Como endere ar um trecho entre duas linhas excluindo as No t pico anterior vimos como endere ar um trecho contendo v rias linhas e aprendemos que limitam o trecho tamb m s o inclu das no endere o Mas s vezes queremos endere ar apenas as linhas que est o dentro de um trecho excluindo as linhas delimitadoras de in cio e fim Nesse caso precisamos de algo mais elaborado Vamos usar um outro arquivo de exemplo com os n meros de um a se
50. os programas de verdade para n o precisar mais do para cham lo promptS cp meu script sed usr bin 65 Dominando o SED Arquivo Como monitorar um arquivo com a ajuda do sed No sed da GNU a partir da vers o 3 02 80 foi adicionada a op o u de unbuffered que instrui o sed a fazer um uso minimalista dos registradores buffers tentando mostrar a sa da o mais r pido poss vel No comportamento normal o sed fica esperando at acabar todo o fluxo de texto EOF para s ent o come ar a mandar para a sa da o resultado do processamento Com esta op o nova este tempo de espera n o existe e assim que ele acaba de processar uma linha j a manda para a sa da instantaneamente A grande vantagem desse comportamento n o a velocidade de resposta mas sim o fato de n o esperar o final do texto Isso torna poss vel editar um fluxo de texto intermin vel Pera como assim intermin vel Sabe aqueles arquivos de registros log files que v o crescendo crescendo indefinidamente com mensagens de erro data informa es e avisos Alguns exemplos no Linux s o var 1og messages O var log maillog Enquanto o servi o que gera estas mensagens estiver ativo ele continua escrevendo mais e mais texto em seu arquivo de log 66 Dominando o SED Arquivo muito comum se precisar acompanhar em tempo real a apari o das mensagens de log para diagnosticar problemas ou acompanhar eventos Um
51. partes do comando tenham tamanhos diferentes e tamb m visualizamos na hora quais s o os pares de caracteres pois est o um embaixo do outro 96 Dominando o SED MAI SCULAS min sculas Claro que para digitar na linha de comando ficar quebrando linhas assim inc modo mas dentro de um arquivo a melhor op o para n o confundir 97 Dominando o SED MAI SCULAS min sculas Como inverter a caixa de todas as letras Agora que j sabemos como usar o comando y para aumentar ou abaixar a caixa das letras e sabendo que ele funciona em pares de letras fica f cil inverter a caixa de todas as letras da linha Primeiro fa amos um teste r pido para ver se ele n o converte duas vezes a mesma letra prompt echo aaaAAA sed y aA Aa AAAaaa Beleza Ent o para fazer o superconversor basta pacientemente compor a superminhoca num superscript inverte caixa sed dica usa quebra de linha como separador ABCDEFGHIJKLMNOPORSTUVWXYZ AAA E OUU i d ii y abcdefghijkImnopgrstuvwxyz aa U abcdefghijklmnopgrstuvwxyz aa aaa es EEI ABCDEFGHIJKLMNOPORSTUVWXYZ AA 55 0 0 Admita o sed lindo n o Temos um script de apenas 3 linhas sem nenhum s mbolo apenas letras E isso inverte a caixa de todas as letras Vamos testar prompt echo SED significa Stream EDitor sed f inverte caixa sed sed SIGNIFICA STREAM edITOR 98 Dominando o SED MAI SCULAS min sc
52. plicados na mesma linha promptS sed couve p couve p couve p verduras txt alface cenoura couve couve couve couve nabo vagem Ficar repetindo o endere o para cada comando muito inconveniente Utilizamos ent o as chaves 3 que nos permitem agrupar v rios comandos em um mesmo bloco Este bloco recebe um endere o que ser usado por todos os comandos contidos nele 17 Dominando o SED Endere o Nosso exemplo anterior fica assim promptS sed couve p p p verduras txt Preste aten o no seguinte detalhe um bloco est sempre associado a um endere o e a chave de fechamento como se fosse um comando do sed devendo portanto ser separada de outros comandos com ponto e v rgula Ao fechar o bloco coloque sempre um antes da Sei que voc leu e entendeu mas tenha absoluta certeza de que voc vai se esquecer desse ltimo v rias diversas milhares de vezes amp 18 Dominando o SED Endere o Como endere ar um trecho entre duas linhas incluindo as Tudo ia bem na nossa vida de endere adores at o dia em que precisamos endere ar mais de uma linha Ou melhor um trecho de texto entre duas linhas Por exemplo como apagar da linha 5 linha 10 de um arquivo Numa primeira tentativa afobada a carreirinha promptS sed 5d 6d 7d 8d 9d 10d arquivo funciona Mas e se quis ssemos apagar 20 ou 30 linhas Esse m t
53. ra de arquivos em 5 minutos O resultado que um comando que deveria ser simples ler arquivos cheio de pegadinhas e falhas conceituais Ent o quando usar este comando tenha em mente que o conte do do arquivo enviado sa da e diretamente n o podendo ser editado e Somente no final do script mesmo havendo comandos ap s somente ap s processada e impressa a linha atual do buffer sempre ignorando a op o n ou o n na primeira linha 68 Dominando o SED Arquivo Por esse resumo j deu para perceber os furos de implementa o n o Mas antes de ver os detalhes vamos aprender a us lo come ando com um exemplo bem comum incluir cabe alho e rodap num arquivo qualquer Estamos fazendo algumas p ginas de internet e percebemos que os textos do in cio t tulo menu de navega o e o do final contato s o sempre os mesmos para todas as p ginas Como somos espertos guardamos estes textos padr o em arquivos separados cabecalho html e rodape html e usamos o sed para inclui los automaticamente nas nossas p ginas HTML Um exemplo gen rico seria promptS sed e 1 r cabecalho html e r rodape html meio html gt pagina html Incluindo o cabe alho no in cio ap s a linha 1 e o rodap no final ap s a ltima linha O comando UNIX similar seria promptS cat cabecalho html meio html rodape html gt pagina html O primeiro detalhe que percebemos no exemplo que pr
54. rva que s o cl ssicos de usar a barra vertical O arroba e e a exclama o Agora para evitar dor de cabe a e usar um delimitador que dificilmente coincidir com qualquer padr o use caracteres esquisitos como s se e Ou ainda se voc quiser fazer algo realmente esquisito use caracteres brancos como o espa o ou o TAB ou letras normais do alfabeto n meros cuidado sed 31 12 2000 d arquivo sed Ni31 12 2000i d arquivo sed 1831 12 20008 d arquivo Ou pior ainda at a quebra de linha pode ser usada prompt sed gt 31 12 2000 gt d arquivo Quem disse que o sed n o divertido amp 38 Dominando o SED Endere o Uma regra boa para a escolha do delimitador al m dele n o coincidir com algum caractere do padr o que ele seja visualmente oposto ao padr o Isso quer dizer que se o seu padr o tiver uma predomin ncia de caracteres altos como uma palavra em MAI SCULAS aconselh vel usar caracteres baixos como delimitadores como a v rgula dois pontos e o sublinhado E se o padr o for predominantemente baixo caracteres como e s o mais indicados Veja visual confuso S SPWD TMP s SPWD TMP s S1 5 5 39 Dominando o SED Endere o O que acontece com endere os inv lidos Um endere o inv lido pode ser uma palavra que n o encontrada em nenhum lugar no texto ou uma linha que n o existe por exemplo a linha 20 num arquivo que s possu
55. s Ao come ar a execu o dos comandos o sed ter uma grande folha remendada e disforme de tarefas a fazer 62 Dominando o SED Arquivo Como tornar execut vel um script sed No UNIX Linux scripts sed podem se tornar arquivos execut veis bastando digitar seu nome para ser interpretado sem precisar chamar com o sed Essa m gica feita em dois passos 1 Informar ao sistema que o arquivo execut vel 2 Informar ao sistema como execut lo O primeiro passo um procedimento comum aplicado a todos os arquivos do sistema que devam ser execut veis E necess rio alterar as caracter sticas do arquivo incluindo nele as permiss es de execu o O comando chmod se encarrega disso e a op o a ser utilizada a x prompt chmod x meu script sed Quem utiliza o comando Is com cores vai notar que script agora ficou verdinho sinal que ele j um arquivo execut vel Para garantir ou no caso de um Is sem cores use o comando ls 1 e veja se as permiss es do arquivo ganharam alguns x mudando de rw rw r para Corwxrwxr x Veja promptS ls 1 meu script sed rw rw r 1 mussum aa 284 Feb 2 17 10 meu script sed prompt chmod x meu script sed 63 Dominando o SED Arquivo promptS ls l meu script sed rWXrwXr x 1 mussum aa 284 Feb 2 17 10 meu script sed Ok temos um arquivo execut vel Mas ainda n o informamos ao sistema que o sed quem deve interpretar nosso script Como fazer isso O
56. s barras devidamente escapadas promptS sed N tmpl lixo bmp d arquivo promptS sed tmpl lixo bmp d arquivo promptS sed 311 121 2000 d arquivo Note que s o escapadas apenas as barras internas as barras delimitadoras do endere o continuam as mesmas 36 Dominando o SED Endere o Como usar outro delimitador fora a barra Agora c entre n s esse neg cio de ficar escapando barras n o nem um pouco pr tico Pior ainda se nosso padr o estiver dentro de uma vari vel e n o for t o vis vel o conflito de barras como em sed gpwD a onde spwp cont m o diret rio atual de trabalho Para esses e outros poss veis problemas o sed nos d a liberdade de escolher qualquer caractere da tabela ASCII como delimitador de endere o Ent o como regra geral para escolher qual s mbolo usar utiliza se um delimitador que se tem certeza que n o vai ser confundido com nenhum caractere do padr o a ser procurado O nico por m para usar algo diferente da barra que precisamos dizer ao sed Ei o pr ximo caractere aqui vai ser o delimitador Para isso basta escapar o primeiro somente o primeiro delimitador assim sed 1 31 12 2000 d arquivo Ent o utilizamos a v rgula como delimitador de endere o escapando a primeira para que o sed a veja como especial 37 Dominando o SED Endere o Delimitador escolha qualquer ASCII escape o primeiro Fora a v rgula outros delimitadores rese
57. ssaasis o eh ipa ais prende sas E E A E o Leca esa paca sda den e ss Es us raso ndo 47 Como gravar o resultado num arquivo sie eaaerrea aeee aaa a nana 48 Como gravar o resultado no pr prio arquivo original iceeeeeeeeseeereeeeeeneentea 51 Como guardar os comandos sed num arquivo script seceeeereeerereeereeso 56 Comoutilizar um script SGd simsusss a store n e rede E ae ido GE ILS aaa DUAS UR LAIS REECE 60 Como tornar execut vel um script sed e ceara eree erre eae orar creneeea acer ncrannna 63 Como monitorar um arquivo com a ajuda do sed siena 66 Como ler o conte do de um arquivo isceeeeeeerereeeeceea eee cena cae aerea ceara ceara nnranana 68 Como gravar um trecho de texto num arquivo sesieeeeeeeeeeeereeeeeeea ee censeneeso 74 Quebra de linha atas spesera Sai eaaa AE A Ea C ia USOS NI salas a SU sia 78 Como apagar uma quebra de linha juntando duas linhas e ssa 80 Como apagar todas as quebras de linha deixando tudo numa s linha 82 Como fazer um la o see sic aii aa aaa dias sado uia V a a e na ira rca dede na SE ATE SEA Dea SA Cada Pena db danada 84 Como fazer um la o com condicional de sa da ss seeeeeeererererere orar ererreranana 85 Como fazer um la o com condicional de entrada isieeeeeeeeeeeerereerenerenerenaea 87 Como fazer um la o utilizando O reserva is ese ee
58. star isolado n o havendo nada ap s ele sen o o nome do arquivo desejado Num script sed basta quebrar a linha ap s o nome do arquivo Na linha de comando deve se usar o e para separar as partes do comando sed Entendido isso vamos ao pr ximo detalhe o conte do do arquivo mandado diretamente para a tela O ideal seria o sed ler o arquivo e colocar o seu conte do no espa o padr o para podermos manipul lo Mas ao inv s disso o conte do simplesmente jogado para a sa da sem controle sem edi o Obs O ssed e o gsed 4 implementaram essa funcionalidade de ler o arquivo para o espa o padr o com o comando R mai sculo Mas n o acaba a Al m de jogar o conte do na sa da sem controle o sed faz isso de maneira n o sequencial tamb m Olha o absurdo promptS cat abc txt Eu sou o conte do do arquivo abc txt de duas linhas prompt echo sed e s ANTES p r abc txt e s DEPOIS ANTES DEPOIS Eu sou o conte do do arquivo 71 Dominando o SED Arquivo abc txt de duas linhas O comando que foi usado possui tr s partes 1 Mostra a palavra ANTES na tela 2 Mostra o conte do do arquivo abc txt 3 Mostra a palavra DEPOIS na tela Esta deveria ser a ordem de execu o dos comandos mas como observado o sed s mostrou o conte do do arquivo depois de completar o terceiro e ltimo comando Mais uma pegadinha do efeito 5 minutos Tem
59. ta linhas sed Mas pelo menos a linha de comando fica menor prompt echo eu nunca farei isso P alavra sh E j que chegamos at aqui podemos ter apenas um arquivo colocando o conte do dos tr s seds direto dentro do script shell bin sh P alavra sh levanta a caixa da primeira letra de cada palavra sed s lt g sed h s blank lower 1 e Ena y abcdefghijklmnopgrstuvwxyz a d i d u ABCDEFGHIJKLMNOPORSTUVWXYZAAAA BE T OUU x s blank lower H g s n sed i SIN s n ti Novamente o comando equivalente no vim seria mais simples s lt u amp g 105 Dominando o SED MAI SCULAS min sculas Como ignorar a diferen a de mai sculas e min sculas normal ao se pesquisar dados querer ignorar a caixa do texto procurado ou seja tanto faz se o texto estiver em mai sculas ou min sculas ambos s o v lidos A grande maioria dos editores de texto leitores de email navegadores e outros programas que manipulam texto t m a op o de ignorar a caixa quando pesquisando por um texto No vim set ic no grep atrav s da op o i e no sed depende Mais uma vez entramos num t pico onde a vers o do sed influi muito nas caracter sticas e poderes dispon veis ent o se prepare para a chuva de possibilidades para algo aparentemente t o inocente Suponhamos a tarefa de apagar o telefone do amigo Pedro que es A man
60. uito til e que pode poupar muita redund ncia no endere o Lembra do exemplo de imprimir mais tr s vezes a linha da couve promptS sed couve p couve p couve p verduras txt Esse comando poderia ser reescrito assim promptS sed couve p p p verduras txt E aquele outro de ancoragem para imprimir apenas a primeira linha que contivesse a letra 0 promptS sed 1 0 o d numeros txt Este pode ficar assim promptS sed 1 0 d numeros txt 42 Dominando o SED Endere o A diferen a parece pequena porque os exemplos usam endere os bem simples mas quando eles s o monstros gigantes que cospem express es regulares o endere o vazio ajuda muito E tem ainda o cl ssico s que um comando v lido e bem utilizado Voc se arrisca a adivinhar o que ele faz 43 Dominando o SED Endere o E se eu n o colocar nenhum endere o O comando serve para todas as linhas Ponto promptS sed d verduras txt prompt 44 Dominando o SED Endere o Detalhes s rdidos sobre endere os Apesar de os t picos anteriores esmiu arem v rios aspectos do endere o ainda restam alguns detalhes que devem ser assimilados e Os nicos comandos que n o recebem endere o s o o e o 3 ambos por serem comando relativos a posi es do pr prio script e n o do texto que est sendo processado e Os comandos que n o recebem dois endere os s o a i q r pois s podem ser ap
61. ulas Como levantar a caixa da primeira letra de cada linha Antes de mais nada n o pense que vai ser f cil D uma looonga respirada vista o capacete anti maionese e vamos viajar Lembra que o comando y troca sempre todas as letras da linha Ent o como fazer para que ele troque apenas a primeira letra e mantenha as outras intactas Mmmmmmmmm precisamos de um pouco de m gica aqui Temos dois componentes a linha e o comando Como n o tem jeito de mudar o y que sempre pega a linha toda s nos resta ent o mudar a pr pria linha A solu o isolar apenas a primeria letra no PADR O deixando a sozinha para que o y fa a o seu servi o e depois rejuntar o resto da linha novamente muito feio mas o que d pra fazer Primeiro problema isolar a primeira letra Antes de mais nada guardamos uma c pia da linha original no RESERVA comando h Em seguida apagamos todo o resto da linha deixando apenas a primeira letra Geralmente a primeira letra da frase j est bem no come o da linha ent o a express o regular a z serve para represent la Mais adiante vamos refinar esta express o mas por enquanto deixemos assim Ent o se j sabemos como identificar a primeira letra apagamos tudo menos ela h s a z 1 99 Dominando o SED MAI SCULAS min sculas Supondo a frase unidos venceremos ap s aplicado o comando acima teremos PATT us HOLD unidos venceremos s Com a primeira
62. um condicional que fa a o script voltar ao come o se tal coisa volte Assim o la o fica condicionado e s ocorre se a condi o for satisfeita Al m do comando b tamb m podemos dar pulos com o comando t que s executa o pulo se o ltimo comando s fez uma substitui o Opa Aqui est a palavra m gica se Ent o o pr prio j um comando com condicional Ent o basicamente usamos o mesmo exemplo anterior com a marca inicio e trocamos O b pelo inicio N s n t inicio Mas lembrando do problema do n na ltima linha precisamos colocar de volta aquele outro condicional esperto promptS sed inicio N s n t inicio numeros txt um dois tr s quatro cinco seis 87 Dominando o SED Quebra de linha Ent o em todas as linhas o x grudar a pr xima com o n de separador e o s o trocar por um espa o Como a substitui o foi feita o pular de volta ao in cio e o ciclo se fecha at a ltima linha Na ltima linha o condicional impede que o x seja executado logo n o haver n ent o o s n o vai ter o que substituir e assim o n o pular de volta ao come o finalizando o script FINISH HIM FATALITY 88 Dominando o SED Quebra de linha Como fazer um la o utilizando o reserva Uma outra maneira de fazer um la o utilizar o espa o reserva e ir estocando l as linhas que se deseja e ao encontrar o ponto de parada carregar o estoque para o padr o
63. uma lista de t picos TOC apenas com os t tulos promptS sed e lt Hl gt w tmp toc e r tmp toc documento html Neste exemplo simples gravamos num arquivo tempor rio todos os t tulos de um documento HTML que s o identificados pela marca lt H1 gt Somente quando estivermos na ltima linha do arquivo lemos o conte do do arquivo tempor rio que cont m todos os t tulos agrupados 75 Dominando o SED Arquivo Apenas como curiosidade o comando similar que utiliza o RESERVA e a t cnica j demonstrada de como fazer um la o utilizando o reserva promptS sed lt H1l gt H d g documento html Vejamos agora uma caracter stica ou limita o dependendo do caso Se o arquivo a ser gravado n o existir o sed o criar Por m caso ele j exista o sed primeiro o truncar para depois utiliz lo J vimos que truncar significa perder todo o conte do anterior Ent o este arquivo n o pode ser usado como arquivo de registros logfile ou como algum tipo de hist rico pois ele varrido a cada execu o do script E uma caracter stica da caracter stica que al m de truncar o arquivo n o que o danado faz isso imediatamente assim que chamado E ele faz isso mesmo que o comando w nem venha a ser executado Ou seja se tiver algum w no script primeiro o sed vai l e trunca o arquivo s depois o script executado A j n o importa mais se o trecho do comando
64. utilit rio UNIX que faz isso o tail quando usado em conjunto com a op o f Ele monitora um arquivo mostrando na tela cada mensagem nova que aparece no fim do arquivo de registros Como geralmente um arquivo de registros mostra mensagens variadas s vezes at com excesso de informa es torna se necess rio o filtrarmos um pouco e obter apenas as mensagens relevantes nossa necessidade no momento Opa falou em filtro Sed nele Um exemplo da vida real seria mostrar apenas as mensagens do sistema relativas s conex es ssh prompt tail f var log messages sed nu sshd p E claro ao inv s de simplesmente mostrar a linha o sed tamb m j podia edit la tirar partes que n o interessam colocar c digos de cores para destacar informa es etcetcetc Mas n o vou tirar do leitor o prazer de fazer sozinho essas frescAW melhorias Ah e cuidado com esse nu perto de crian as amp 67 Dominando o SED Arquivo Como ler o conte do de um arquivo J sentiu a necessidade de no meio de um script sed ler o conte do de um arquivo qualquer e mand lo para a sa da E exatamente esta a fun o do comando r de Read Mas aten o Como o sed gosta de fluxos de texto e n o de arquivos esse comando um pouco como dizer equivocado A impress o que se tem que o sed estava pronto para sair do forno e de ltima hora chegou o Sr Gerente Foobar e mandou o programador colocar suporte a leitu
65. w vai ser necess rio ou n o pois o conte do do arquivo j foi apagado mesmo Usando o w o arquivo SEMPRE truncado 76 Dominando o SED Arquivo Esse comportamento facilmente verific vel com este comando promptS sed 1 q 2 w tmp arquivo arquivo txt Como o primeiro comando diz que na linha 1 o script deve ser abortado comando q o resto dele comando w nunca chegar a ser executado Mesmo assim o arquivo tmp arquivo ser zerado Esse comportamento impede que se utilize o mesmo arquivo para um comando r seguido de um comando w ou seja mostrar seu conte do atual antes de grav lo Muito cuidado 77 Dominando o SED Quebra de linha Quebra de linha Lidar com quebras de linhas com certeza umas das tarefas mais chatas de se fazer com o sed chatas no sentido de se tomar cuidado e saber de algumas pegadinhas Mmmmmm ser que eu devo contar os segredos e desmistificar todo o assunto para voc Claro Para come ar a quebra de linha n o pode ser casada ali s pode Ou melhor depende Ent o primeiro vamos entender o que exatamente uma quebra de linha Temos o cifr o que indica o fim da linha que o que vem antes da quebra da linha Lembre se da m quina de escrever ao chegar ao final da linha voc puxa o bracinho e o carretel gira esta seria a quebra de linha que no Linux j vem de brinde com o retorno do carretel Trrrrrrr tshhhhhh plin Ent o se

Download Pdf Manuals

image

Related Search

Related Contents

Manuale tecnico KNX ABB-i-Bus - Busch-jaeger  LogiLink 1m USB 3.0  Istruzioni per l`uso Instructions for use - Tecno-Gaz  Viewsonic LED LCD VG2401mh  Sony Xperia SL 3G Black    GEMA_UNITECHWW 060324  American Standard 6054.XXX Indoor Furnishings User Manual  Downloaded from www.vandenborre.be  RS 28-50  

Copyright © All rights reserved.
Failed to retrieve file