Sie sind auf Seite 1von 18

Introduo - o que e para que serve Sed a sigla para Stream Editor, um editor que funciona por linha

nha de comando, ou em sed e shell scripts. uma ferramenta padro em sistemas Unix (Linux, BSD, etc), e foi desenvolvido por Lee E. McMahon, da grande Bell Labs, e foi uma evoluo do comando grep aliado funcionalidade do ed (text editor), predecessor do sed. O sed funciona de forma sequencial, linha por linha. Voc carrega os dados pro sed, atravs de canalizao (pipe, cat) ou passando um arquivo para o mesmo, junto com algumas instrues e o sed devolve o resultado destas instrues nos dados, sempre por linha, que podem ser salvas no prprio arquivo, redirecionadas para outro arquivo ou redirecionadas para outra forma de sada, como serem simplesmente mostradas na tela. A utilidade do sed enorme, principalmente com o uso das expresses regulares. Com o sed, voc faz edies em textos, acha coisas e substitui, tudo isso de uma forma bem simples com poucos comandos. Essencial para quem trabalha com dados, textos, strings, linguagens de programao, HTML, etc, pois ele faz edies nos seus arquivos sem a necessidade de abri-los. Se os seus arquivos mantiverem uma certa padronizao, facilita bastante a manuteno destes, principalmente cdigos-fonte. Lembrando que os arquivos do Unix, em sua maioria, so textos. Portanto, para estudo e extrao de informaes do sistema, uma ferramenta comumente usada. Inspirou o Perl e 'parente' do AWK, portanto, se j estudou expresses regulares, j est a mais de meio caminho andado. O fato de no utilizar variveis, evidencia sua simplicidade e foco. Quer apagar todos os comentrios do seu cdigo? Use sed. Imagine que voc tem um programa com centenas de arquivos ou centenas de pginas em HTML ou PHP, e quer adicionar o nome do seu colega, que vai te ajudar no projeto, use sed. Neste mesmo projeto, voc notou que pode substituir uns trechos do cdigo por outro trecho bem mais simples, ou se quiser adicionar algo, e este trecho buscado est em todos os arquivos, vai abrir arquivo por arquivo e substituir?? No! V de sed!

Enviando dados para o sed Vamos usar o arquivo /etc/passwd.

Digite: $ cat /etc/passwd Agora vamos passar esse arquivo pro sed, atravs de pipe, | : $ cat /etc/passwd | sed '' O sed sempre mostra o resultado da edio feita em cada linha, nesse caso, nenhuma. Por isso aparece tudo do passwd. Agora vamos deletar todas as linhas. Mas no se preocupe, vamos deletar somente o que est no buffer do sed: $ cat /etc/passwd | sed 'd' O comando d deleta a linha atual do buffer e imprime o resultado, de novo e de novo, at o fim do arquivo. Como no dissemos para escrever, ele apenas l e no altera o arquivo. Para redirecionar o resultado do sed, ao invs dele ser mostrado na tela, usamos a forma padro do sed, com o '>': $ cat /etc/passwd | sed 'd' > /tmp/newpasswd Outra maneira de invocar dados pro sed, atravs da flag -e, sem usar pipe. Desta maneira, faa no seguinte padro: sed -e 'comandos/de/edio' /caminho/do/arquivo No nosso exemplo, ficaria: $ sed -e 'd' /etc/passwd Vale lembrar que em algumas verses do sed, no necessrio o '-e'. Teste a no seu. Note que o sed automaticamente imprime o resultado que foram processados. Caso no queira v-los, use a flag '-n': $ cat /etc/passwd | sed -n '' Caso voc queira que, em alguma situao, seja mostrado algo, use o comando p, como o comando d. Ou seja, o comando a seguir no tem efeito nenhum: $ cat /etc/passwd | sed -n 'p' | head -10 O head pra mostrar apenas as primeiras sadas.

Vamos mostrar como especificar endereos pro sed trabalhar. Para efeitos de estudo, salve arquivo: teste.txt 1 2 3 4 5 6 Para apagar a linha n, use 'nd' ao invs de somente 'd', como foi mostrado antes: $ cat teste.txt | sed '1d' Nesse caso, o sed percorre cada linha e aplica o comando. O comando 'caso a linha seja a primeira, apague-a'.

Intervalo de endereos
Para definirmos um intervalo para o sed operar, colocamos o endereo do incio separado do endereo do fim separado por vrgula. Por exemplo, vamos apagar da segunda at a quarta linha: $ cat teste.txt | sed '2,4d' Sabendo que o sed trabalha de forma sequencial, sempre do incio pro fim do arquivo, interprete o resultado de: $ cat teste.txt | sed '4,2d' Se quisermos apagar uma linha e as prximas 3, por exemplo, usamos '+3' como endereo: $ cat teste.txt | sed '1,+3d' Porm, se ao invs de apagar certas linhas quisermos apagas todas as outras, menos ela? Simples, usamos o bom e velho operador de negao '!', aps o endereamento. Vamos apagar todas, menos a primeira linha: $ cat teste.txt | sed '1!d' Todo, menos da terceira at a quinta linha: $ cat teste.txt | sed '3,5!d'

Ou: $ cat teste.txt | sed '3,+2!d'

Endereos em forma de PA
Se lembra de PA - Progresso Aritmtica? Por exemplo, uma PA de elemento inicial 1 e razo 3: 1, 4, 7, 10. Podemos usar isso em sed com o comando a~r, onde "a" o nmero inicial, e "r" a razo. Exemplo: $ cat teste.txt | sed '1~3d' Muitas vezes, queremos ver o que foi apagado, para isso negamos o endereamento: $ cat teste.txt | sed '1~3!d'

Substituindo Esta uma das funes mais importantes do sed, substituir um trecho de texto por outro. O modelo de comando para substituir uma coisa por outra : s/substitua_isso/por_isso/ A substituio ser feita na primeira ocorrncia de 'substitua_isso' na LINHA. Se quiser que a substituio ocorra em todas as ocorrncias em uma linha, use a flag "g", ao final de 's///': s/substitua_isso/por_isso/g Vamos testar. Crie o arquivo: frase.txt Escreva nele: O vento do duende vem de roxo quando pisca na inconscincia do javali Obviamente, esta frase no faz o menor sentido. Mas far com a seguinte alterao: $ cat frase.txt | sed 's/javali/duende/' Pois ela substituir a primeira ocorrncia de 'javali' e ir substituir por 'duende'. Caso nunca tenha estudado expresses regulares, '^' se refere ao incio da linha e '$' ao final. Teste: $ cat frase.txt | sed 's/^/INICIO/' $ cat frase.txt | sed 's/$/FIM/'

Como exerccio, coloque um ponto final ao fim da frase, de duas maneiras diferentes. Outras flags de substituio: NUMERO :coloque um numero ao final de s/// para especificar o nmero da ocorrncia a ser substituda p :mostra o que foi substitudo w output :o 'w' de escrever. Ou seja, manda o que resultado da substituio para o arquivo 'output' i ou I :para substituio ser case-insensitive (no importa se maisculo ou minsculo) m ou M :faz com que a '^' reconhea uma string vazia aps a newline e uma vazia antes do '$'

Outros separadores
Se quisermos alterar um endereo "/etc" por "/dev", podemos fazer: s/\etc/\/dev/ Pois, para usar o "/" como caractere, devemos colocar "\" antes. Ou substituir o separador. No obrigado o uso de "/", no "s///". Podemos usar ":" e teramos "s:::". Ficaria: s:/etc:/dev:

Apagando
Apagar, em suma, substituir uma coisa por nada. Para apagar 'javali' de nossa frase, fazemos: $ cat frase.txt | sed 's/javali//' Ou seja, trocamos 'javali' por nada. Embora saibamos que sem o javali a frase no far o menor sentido. Substituio atravs de endereos Assim, o comando deletar 'd', podemos agir especificamente em uma linha. Para isso, basta dizer qual linha se quer atuar. Por exemplo, vamos substituir o nmero 3, da linha 3 no teste.txt, por 2112: $ cat teste.txt | sed '3s/10/2112/' Analogamente, poderamos usar um intervalo de endereos ou endereos em PA.\

Vamos colocar "0" antes de cada nmero: $ cat teste.txt | sed '1,6s/^/0/'

Mltiplas edies
De volta nossa frase: "O vento do duende vem de roxo quando pisca na inconscincia do javali". Se quisermos substituir 'duende' por 'gnomo' e 'javali' por 'porco', no precisamos usar dois comandos de sed: $ cat frase.txt | sed 's/duende/gnomo/' $ cat frase.txt | sed 's/javali/porco/' Podemos fazer: $ cat frase.txt | sed 's/duende/gnomo/ ; s/javali/porco/' Ou seja, apenas separamos os comandos de substituio por meio de ponto e vrgula. Como est tudo entre ' ', como se fosse um comando s. Outra forma atravs da flag "-e", que se refere a mltiplos comandos: $ cat frase.txt | sed -e 's/duende/gnomo/' -e 's/javali/porco/' Outra forma, mais organizada e clara, de fazer mltiplas edies utilizando o bash, que sabe quando ainda no terminamos de digitar os comandos. Ele sabe disso por conta do ' (aspas). O comando s completo quando houverem dois ' (aspas). Veja: $ cat frase.txt | sed 's/duende/gnomo/ [ENTER] $ s/javali/porco/ [ENTER] $ ' [ENTER] O sed s roda depois do ltimo ENTER. interessante se utilizar dessa terceira maneira quando seus comandos forem ficando grandes e complexos. Sbio bash!

Scripts em sed Caso use com frequncia algum comando de sed, voc pode salv-lo na forma de script. Por exemplo, salve o arquivo: frase.sed

Com o seguinte contedo: s/duende/gnomo/ s/javali/porco/ Para executar, siga este padro: $ sed -f comandos_em.sed arquivo_em_que_se_vai_trabalhar.txt No nosso caso: $ sed -f frase.sed frase.txt Note que o sed interpreta cada linha como um comando, no sendo necessrio estarem entre ' ' (aspas). Lembre-se que linha no a linha visvel. Voc pode escrever 1000 linhas em um editor e estar na primeira linha ainda, embora, visualmente voc veja vrias. Para isso ficar bem claro, no Vi/Vim, digite :set nu, no modo comando. Caso queira tornar seu script executvel, adicione isso na primeira linha: #! /bin/sed -f Depois, d permisso para executar: $ chmod +x frase.sed Para executar: $ ./frase.sed frase.txt

Comentando seus scripts


Uma boa prtica em programao, o uso de comentrios. Servem para explicar melhor uma passagem e no vo afetar a interpretao/compilao do cdigo. algo de desenvolvedor para desenvolvedor. Em sed, assim como na maioria das linguagens de script, se utiliza '#' para fazer comentrios. * Uma ressalva: Caso os dois primeiros caracteres de seu script sejam: #n

O sed interpretar como a flag "-n" (no imprimir), anteriormente explicada. Ou seja, tome cuidado caso este seja seu objetivo. Exemplo: # Comentrio ok #Comentrio ok #Nesse caso, tambm #nesse caso vai dar erro

Inserindo e anexando
Uma maneira de editar seus arquivos atravs do comando i (insert, inserindo) e a (append, anexando). Vamos adicionar os nmeros "-1" e "0" ao incio de nosso "teste.txt", e os nmeros "7" e "8" ao final. Para isso, crie o script: teste.sed #! /bin/sed -f 1 i\ -1\ 0 $ a\ 7\ 8 O nmero 1 representa a linha em que vamos inserir. O $, em expresso regular, significa a ltima linha do arquivo. Logo, inserimos "-1" e "0" a partir da primeira linha e "7" e "8", a partir da ltima.

Expresses regulares Este artigo tem assunto para livros e livros, pois, sem dvida, a ferramenta mais til e utilizada para quem quer processar informaes na forma de texto. H muita, mas muita coisa na Internet, que podem facilitar muito a vida de quem precisa trabalhar com sed, AWK, Perl e outras linguagens que faam uso de expresso regular, pois no existe uma regra geral de escrita, varia muito de acordo com a criatividade de quem escreve.

Existem at competies minimalistas, pra ver quem consegue fazer um mesmo trabalho utilizando de expresses regulares mnimas. Se for pesquisar algo e em ingls, ela muito conhecida por regex (regular expressions). Para mais informaes, veja a ltima parte deste artigo. Expresses regulares so, basicamente, um conjunto de caracteres. Mas esse conjunto pode representar muitas coisas, e de uma maneira bem simples (s vezes no). J conhecemos dois elementos, " ^ " e " $ ". Vamos usar o que sabemos pra fazer algo. Vamos supor que voc tornou-se moderador do VOL, e ter que analisar muitos scripts que so enviados todos os dias e existem sempre aquelas pessoas que comentam demais ou gostam de deixar recados pra namorada, tipo "agora vamos somar", "agora vamos testar a condio", "RoSy te Amuh bjos by Cachorrao-Raquer@vidaloka.com". Como voc faria pra eliminar os comentrios? Lembrando que sempre comeam com '#' no incio da linha. A regex pra isso : ^# Vamos usar o arquivo syslog.conf (se no tiver, tente o sysctl.conf), como exemplo: $ cat /etc/syslog.conf | sed '/^#/d' Voc poderia ter usado "s/^#//" , mas a teria digitado 's' e '/' toa. Mas, mais importante do que fazer da maneira mais simples, conseguir fazer. Com o tempo, e preguia, voc vai digitando cada vez menos. Suponha agora que voc quer transformar uma linha em branco de seu editor em texto em '<p>', que o pargrafo em HTML. Uma linha em branco nada mais que: ^$ Ou seja, nada entre o comeo e o fim. Faz todo o sentido, n? $ cat txt2html | sed 's/^$/<p>/g' Pronto. Com isso e com o comando "i" e "a", j pode iniciar um soft que converte seu arquivo de texto em cdigo HTML. ;) * Falei srio. Com o uso da flag 'd' de delete, vemos somente o que restou. Sempre que quisermos ver o que o casou ("matched"), use as flags '-n' e 'p': $ cat /etc/syslog.conf | sed -n '/^#/p'

Outros caracteres usados em regex: . :Pode substituir qualquer caractere: p.p casa tanto com 'psp', um PlayStation portvel ou um palavro abreviado. * :Casa com qualquer quantidade do caractere anterior. No caso de 'p.p', s casa com 3 caracteres. Se fosse 'p.*p', casa qualquer coisa que comece com p e termine com p, inclusive 'pp' ou o palavro na forma formal. [] :Casa com qualquer caractere dentro desses colchetes. Por exemplo, quer testar se alguma linha do arquivo comea com as letras 'a', 'b' ou 'c': ^[abc]. Se usar '-', voc define uma faixa : [a-z], de 'a' at 'z', ou [0-9]: de 0 at 9

Classe de caracteres
Em vez de escrevermos [a-z], [A-Z], [0-9]...elas j vm em forma de classes pr-definidas, pois so de uso corriqueiro por quem usa regex. Por exemplo: Quer saber que linhas de um arquivo comeam por um caractere alfabtico? $ cat /etc/sysctl.conf | sed -n '/^[:alpha:]/p' E o que fica se voc apagar tudo que no comea por um caractere alfabtico? Veja: $ cat /etc/sysctl.conf | sed '/^[:alpha:]/d' A seguir, a lista completa das classes de caracteres do GNU sed: [[:alnum:]] Alfabticos e nmericos [a-z A-Z 0-9] [[:alpha:]] Alfabticos [a-z A-Z] [[:blank:]] Caractere em branco, espao ou tab [ \t] [[:cntrl:]] Caracteres de controle [\x00-\x1F\x7F] [[:digit:]] Nmeros [0-9] [[:graph:]] Qualquer caractere visvel(ou seja, exceto em branco) [\x20-\x7E] [[:lower:]] Letras minsculas [a-z] [[:upper:]] Letras maisculas [A-Z] [[:print:]] Caracteres visveis (ou seja, exceto os de controle) [\x20-\x7E] [[:punct:]] Pontuao [-!"#$%&'()*+,./:;<=>?@[\\\]_`{|}~]. [[:space:]] Espao em branco [ \t\r\n\v\f] [[:xdigit:]] Nmero hexadecimais [0-9 a-f A-F]

Expresses regulares em intervalos de

endereos
Vimos um exemplo de endereos usando a numerao das linhas. Mas raramente sabemos disso. Na real, o texto ter dezenas, centenas ou milhares de linhas, e voc no faz a mnima ideia de qual o nmero da linha de determinada informao. Reescreva a "frase.txt", como: O vento do duende vem de roxo quando pisca na inconscincia do javali. Em vez de usar nmeros para definir linhas, podemos tentar casar uma parte do texto. Por exemplo, vamos exibir da segunda at a quarta linha. $ cat frase.txt | sed -n '/vem de roxo/,/na inconscincia/p' Note que: /vem de roxo/ = linha 2 /na inconscincia/ = linha 4 Assim, no precisamos nos importar com a numerao, e sim com um texto que podemos casar. Ento, o sed acha as linhas e procede automaticamente. Para o sed, '2' e '/vem de roxo/' so a mesma coisa. Ento, podemos fazer: $ cat frase.txt | sed -n '2,/na inconscincia/p' Substituies com expresses regulares, so, sem dvida, a combinao mais poderosa do sed.

Referenciando com & - Back reference

Referenciando com &


Sempre que o sed casa algo, ele armazena esse algo em " & ". Por exemplo: s/javali/porco/

Nesse caso: &=javali Vamos usar o & para repetir cada nmero do "teste.txt": $ cat teste.txt | sed 's/./&&/g' " . " (ponto)-> Representa um nico caractere. Como, no "teste.txt", cada linha possui somente um caractere, que um nmero, o & armazenar o valor deste nmero, em cada linha. Estamos substituindo um nmero (.), por ele duas vezes(&&). Vamos para um exemplo prtico. Vamos supor que voc tem um site que pede o telefone do cliente, com DDD+nmero, sem parnteses ou hfens. Crie: tels.txt 2134567890 8588887766 8599001122 Porm, exibir um nmero assim confuso. Pra armazenar no seu banco de dados, OK. Mas para exibir isso pro cliente, no interessante. Ento, vamos fazer um script em sed que pegue um ".txt" contendo telefones e transforme no padro: (DDD)NUMEROS-NUMEROS 1. Vamos pegar os dois primeiros nmeros e transformar neles envoltos de parnteses. Para pegar os 2 primeiros nmeros do incio de cada linha: 's/^[[:digit:]][[:digit:]]/(&)/g' Ou seja, o que vai casar, dois dgitos seguidos, fica armazenado na & e vamos colocar, no lugar desses dois nmeros, isso (&). Mas muito chato escrever [[:digit:]] duas vezes, pois, e se fossem 10 nmeros e no s 2? Para repetio, usamos o nmero de vezes que queremos repetir entre colchetes: {n}. No nosso caso, seria: [[:digit:]]{2} Vamos colocar isso no script, lembrando que temos que 'escapar' '{' e '}': 's/^[[:digit:]]\{2\}/(&)/g' 2. Depois de colocar os parnteses, devemos colocar um hfen aps 4 dgitos.Como dizer isso pro sed?

Simples. Seja 'abcd' os nmeros, queremos substituir isso por 'abcd-'. Mas no pode ser quatro nmeros quaisquer, tem que ser os 4 dgitos aps o parntese " ) ". Ento, fica: s/)[[:digit:]]\{4\}/&-/g 3. Lembrando que, o comando 2. s funciona se a substituio referente ao item 1, j tiver ocorrido. Ou seja, vamos colocar os comandos em sequncia, e usaremos a flag '-e' para edies mltiplas. O resultado : $ cat tels.txt | sed -e 's/^[[:digit:]]\{2\}/(&)/' -e 's/)[[:digit:]]\{4\}/&-/' > tels2.txt E obtemos na "tels2.txt": (21)3456-7890 (85)8888-7766 (85)9900-1122

Back reference
'&' s no mais til porque s um. No exemplo anterior, fizemos duas alteraes no nmero. Imagine porm, se ao invs de duas, tivssemos que fazer vrias edies numa linha. Faramos " -e 's///' " vrias vezes? No, daria muito trabalho. Vamos usar back reference! Coloque cada coisa que voc quer casar entre parnteses. Ou seja, faa sua regex normalmente, mas ponha trechos dela entre parnteses. A cada trecho entre parnteses, o sed guarda o que foi casado em '\1', '\2', ..., em quantos trechos voc tenha criado, para que voc possa trabalhar com vrias coisas que casaram, no mesmo comando. Lembrando que para usar parnteses no sed, voc tem que escap-lo : \(\) Vamos pegar o arquivo gerado no exemplo passado, o "tels2.txt", e explicitar mais cada trecho do telefone. 1. Cdigo de rea O cdigo de rea tudo que est do incio at ')'. Como o analisador de linha do sed inicia no comeo da linha, no necessrio explicitar isso, o ^ .

Veja: .*) Colocando esse trecho entre parnteses(escapados) para depois referenci-lo: \(.*)\) Pronto. Se o sed achar um trecho do tipo: (nn), ele armazenar o que achar em '\1', onde 'n' um caractere qualquer. 2. Primeira parte do nmero So os quatro primeiros nmeros do telefone, antes do hfen e depois dos parnteses. Eles podem ser achados entre ')' e '-' . Porm, aqui tem um detalhe. Como anteriormente j casamos o trecho inicial (nn), a anlise de linha do sed est localizada aps o ')', pois vamos colocar tudo num comando s, como voc ver mais frente. Portanto, no escrevemos: ).*E sim: .*Ou seja, catamos tudo, desde o ')', at o hfen. Colocando entre parnteses, escapando: \(.*\) Agora, os 4 primeiros nmeros, fora o DDD, est em '\2'. 3. Agora, o analisador de linha do sed est localizado aps o hfen e queremos pegar tudo do hfen at o final: .*$ Colocando entre parnteses e escapando: \(.*$\) Esse trecho ficar em '\3'. 4. Agora vamos formatar a sada de modo a exibir uma mensagem bem mais detalhada sobre o telefone. Pra isso, colocamos tudo isso junto num 's///': $ cat tels2.txt | sed 's/\(.*)\)\(.*-\)\(.*$\)/DDD: \1 Primeira parte: \2 Segunda parte: \3/g' Note que pegamos tudo em sequncia, de uma vez: primeiro o DDD, depois os 4 seguintes nmeros e depois os 4 finais. como se ns tivssemos usado o sed para dizer como o formato do telefone: (nn)NUMERONUMERO Como todos so neste formato, foi possvel dividir em trechos: \1, \2 e \3 Isso s aconteceu graas padronizao dos dados.

E o resultado : DDD: (21) Primeira parte: 3456- Segunda parte: 7890 DDD: (85) Primeira parte: 8888- Segunda parte: 7766 DDD: (85) Primeira parte: 9900- Segunda parte: 1122

Hold space Tambm conhecido como espao reserva, um espao temporrio do sed, onde podemos inserir e extrair algumas informaes de l. Diferente do espao padro, o buffer do sed, o espao reserva no permite que editemos coisas nele, permite apenas que coloquemos e tiremos linhas. Nessa de colocar algo no buffer, passar pro hold, escrever algo novamente buffer e depois pegar a informao que estava no hold, podemos fazer magias. H 3 comandos bsicos para lidar com o hold space: h ou H :Sobrescreve(h) ou anexa(H) no hold space um contedo do buffer. g ou G :Sobrescreve(g) ou anexa(G) no buffer um contedo do hold space. x :Troca os contedos do buffer e hold space. OK, vamos mgica: $ cat teste.txt | sed -ne '1!G' -e 'h' -e '$p' Nosso "teste.txt" um arquivo numerado de 1 a 6. Uma anlise sobre a funo de cada comando: 1!G: se a linha que est sendo atualizada no for a primeira, anexa no buffer o que est no hold space h: coloca no hold space o que est no buffer $p: se a linha atual for a ltima, imprimir Vamos fazer como o sed faz, analisar linha por linha. 1) Linha: Primeiro comando: no executado. Segundo comando: colocamos o nmero 1 no hold space. Terceiro comando: no executa.

2) Linha: Primeiro comando: no buffer temos o 2, e anexamos o 1 a ele (estava no hold). Segundo comando: coloca 2 e 1 no hold. Terceiro comando: nada.

3) Linha: Primeiro comando: no buffer temos 3, e anexamos o 2 e o 1(estavam no hold). Segundo comando: colocamos 3, 2 e 1 no hold. Terceiro comando: nada.

4) Linha: Primeiro comando: no buffer temos o 4, e anexamos 3,2 e 1(estavam no hold). Segundo comando: colocamos 4, 3, 2 e 1 no hold. Terceiro comando: nada.

Ou seja, fcil ver que, quando estamos numa linha do arquivo, todas as anteriores esto no hold. E adicionamos ao buffer atual o que est no hold, ou seja, adicionamos a linha atual todas as linhas anteriores. Lembrando que, ao adicionar, no estvamos adicionando uma nova linha, e sim o nmero ao final da linha atual do buffer. Quando chegarmos na ltima linhas, a 6, adicionamos o que est no hold: 5 4 3 2 1 Ou seja, este script imprime um arquivo ao contrrio, da ltima para a primeira linha.

Por onde prosseguir e consideraes finais Cdigo-fonte do sed: ftp://ftp.gnu.org/pub/gnu/sed FAQ sobre o sed:

http://sed.sourceforge.net/sedfaq.html No site http://sed.sourceforge.net/grabbag/scripts encontramos uma srie de dicas, cdigos, curiosidades e, acredite, uma verso do Sokoban e do Arkanoid, feito em sed(!), por um brasileiro chamado Aurelio Marinho Jargar. Alm disso, o Aurelio, ex- funcionrio da Conectiva, criou o sedsed, que um debugger, identador e transforma seu cdigo sed em HTML! O site pessoal do Aurlio uma verdadeira fonte de estudos e informaes, tanto de sed como de Software Livre, Vim, Emacs e valiosas experincias pessoais. Ele tambm lanou um livro sobre Expresses Regulares, tanto livro impresso como on-line. E o mais bacana, ele disponibilizou gratuitamente o livro on-line: http://aurelio.net/regex/guia O impresso j se esgotou! Uma verdadeira prola, uma obrigao, caso voc trabalhe com sed ou expresses regulares de um modo geral. Sed one-liners: http://sed.sourceforge.net/sed1line.txt um arquivo de texto com dezenas de comandos, comentados, de apenas uma linha, que so geniais e extremamente teis. Verso em portugus (no a verso mais atualizada): http://sed.sourceforge.net/sed1line_pt-BR.html Aconselho a voc a continuar nessa jornada pelas ferramentas do Unix, com meu artigo sobre AWK. Com isso, voc ter um pouco mais de controle e informao sobre esse poderoso sistema operacional. No mais, deixo aqui a dica que deixei l: Uma boa prtica que deve ser mantida por quem costuma trabalhar com dados, textos e qualquer tipo informaes, a padronizao. De nada adianta voc saber usar AWK, sed, Perl, Python... Se os seus arquivos possuem informaes desorganizadas. Separe bem seus arquivos em pastas, com nomes dos arquivos bem expressivos, de preferncia com contedo o mais simples e direto possvel. Isso vai facilitar muito para, depois, voc minar informaes, comparar e agrup-las.

Todo mundo sabe a genialidade por trs da implementao do GNU/Linux, mas nem todo mundo lembra da ORGANIZAO desse sistema. Seja organizado e padronizado tambm. No bom, essencial.

Artigo feito para o http://programacaoprogressiva.blogspot.com.br e Viva o Linux, baseado em estudos feitos por livros e pesquisas no Google. Por Jarlisson Moreira http://www.vivaolinux.com.br/artigos/impressora.php?codigo=13712

Das könnte Ihnen auch gefallen