ajudinha simples com o SED... [RESOLVIDO]

1. ajudinha simples com o SED... [RESOLVIDO]

Ronald Rosa
ronaldrosa

(usa Ubuntu)

Enviado em 06/06/2012 - 10:01h

Paz do Senhor,

Tenho um problema simples para resolver com o SED, e gostaria de ajuda.

Cenário: Tenho um arquivo.HTML que deve ser alterado com frequência apenas na linha 7, só isso.

Ex.:

1 <html>
2 <br>
3 <br>
4 <br>
5 <body>
6 <marquee>
7 AVISO: Jesus Cristo e o Rei da Gloria! Salmo 24
8 </marquee>
9 </body>
10 </html>



No caso seria ALTERE TODA A LINHA 7 pelo seguinte texto: "NOVO TEXTO DA LINHA 7" somente isso.


Isaías 55:6
Paz.


  


2. Re: ajudinha simples com o SED... [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 06/06/2012 - 10:27h

Não sei se existe um método mais fácil, mas ai vai um que funciona e uso:


#!/bin/bash

[ -z "$1" -o ! -f "$1" -o -z "$2" ] && echo "Sintaxe de uso $0 ARQUIVO NUMERO_LINHA CONTEUDO" && exit 1

ARQUIVO="$1"
LINHA="$2"
shift 2
CONTEUDO_NOVO=$*

CONTEUDO_ANTIGO=$(head -n$LINHA "$ARQUIVO" | tail -n1)

if sed -i "/^$CONTEUDO_ANTIGO$/s/$CONTEUDO_ANTIGO/$CONTEUDO_NOVO/g" "$ARQUIVO"; then
echo "arquivo $ARQUIVO alterado com sucesso!!!"
else
echo "Não foi possível alter o arquivo $ARQUIVO"
fi


Basta salvar o conteúdo em um arquivo, dar permissão de execução (chmod +x arquivo) e executar:

./script ARQUIVO NUMERO_LINHA NOVO_CONTEUDO

Atenção: Se CONTEUDO não for fornecido, a linha vai ficar em branco ;-)






3. Re: ajudinha simples com o SED... [RESOLVIDO]

Ronald Rosa
ronaldrosa

(usa Ubuntu)

Enviado em 06/06/2012 - 10:35h

Pô Varão fiquei até assustado, não conheço muito... :) rs rs...

Consegui assim:


$ sed -i '7d' arquivo.html
# Esse acima apaga a linha 7 inteira


$ sed -i '7i novo texto da linha 7' site.html
# Esse acima "insere o novo texto" na linha 7


Isaías 55:6
Paz


4. Re: ajudinha simples com o SED... [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 06/06/2012 - 10:45h

Perfeito! Não conhecia essa sintaxe ;-)


5. Re: ajudinha simples com o SED... [RESOLVIDO]

Ronald Rosa
ronaldrosa

(usa Ubuntu)

Enviado em 06/06/2012 - 11:04h

Beleza,

Resolvido essa parte, teria como ajudar nessa seguinte:

Criei uma interface simples na qual digito o texto a ser inserido.


$ zenity --entry


1) Ao executar esse comando uma janela é aberta para eu inserir o texto

2) O texto que eu digitar nela, deve ser escrito na linha 7


só isso :)



Preciso criar uma variável para armazenar o texto correto ?

Teria como me ensinar a criar a variável ?



Paz.


6. Re: ajudinha simples com o SED... [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 06/06/2012 - 11:53h

Isso mesmo, precisa criar uma variável, fiz uma rápida modificação no que fiz:


#!/bin/bash
ARQUIVO='nome_do_seu_arquivo.html'
LINHA=7
# aqui é aberta a janela do zenity pedindo o valor e o mesmo é armazenado na variavel CONTEUDO_NOVO
if CONTEUDO_NOVO=$(zenity --entry); then
if sed -i "${LINHA}d" "$ARQUIVO" && sed -i "${LINHA}i $CONTEUDO_NOVO" "$ARQUIVO"; then
echo "arquivo $ARQUIVO alterado com sucesso!!!"
else
echo "Não foi possível alter o arquivo $ARQUIVO"
fi
fi





7. Re: ajudinha simples com o SED... [RESOLVIDO]

Ronald Rosa
ronaldrosa

(usa Ubuntu)

Enviado em 06/06/2012 - 12:16h

Oh Glória!!!

Resolvido, muito obrigado mesmo.

O único detalhe é que rodando pelo Gnome-Terminal ou Xterm o script funciona.

Porém se dou 2 cliques na Área de Trabalho, ele até abre a interface pedindo o texto, mas não escreve no arquivo (creio que o sed, then, echo não estão sendo executados) nem exibe a mensagem de confirmação no final.


Tem como resolver ?
Paz.


8. Re: ajudinha simples com o SED... [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 06/06/2012 - 12:22h

A mensagem não é exibida porque o echo faz isso no terminal ;-)

Com esse abaixo já vai mostrar:

#!/bin/bash
ARQUIVO='nome_do_seu_arquivo.html'
LINHA=7
# aqui é aberta a janela do zenity pedindo o valor e o mesmo é armazenado na variavel CONTEUDO_NOVO
if CONTEUDO_NOVO=$(zenity --entry); then
if sed -i "${LINHA}d" "$ARQUIVO" && sed -i "${LINHA}i $CONTEUDO_NOVO" "$ARQUIVO"; then
zenity --info --text="arquivo $ARQUIVO alterado com sucesso!!!"
else
zenity --info --text="Não foi possível alter o arquivo $ARQUIVO"
fi
fi



Eu particularmente uso o yad no lugar do zenity, nem conheço muito a sintaxe do zenity, mas isso é conversa pra mais de horas ;-)

Se quiser conhecer sobre o Yad: http://www.vivaolinux.com.br/artigo/Yad-016-Eu-quero-sempre-mais-de-ti/

Ou como criar um lançador para o scripts, como esse que passei, veja: http://www.vivaolinux.com.br/dica/Criar-icone-para-executar-Scripts/










Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts