Logo Hardware.com.br
renanlnx
renanlnx Membro Junior Registrado
119 Mensagens 1 Curtida

Ajuda - Problema simples comando sed

#1 Por renanlnx 13/09/2009 - 14:32
Preciso usar o sed para substituir expressoes irregulares...E espero que possam me ajudar.

ex:
Em um arquivo de texto(escrit.html) tem o seguinte texto

/home/blalbalbla/blalbla/saltogrande: Exemplo vendas blablabla

E quero que ele fique assim:

www.saltogrande.com.br: vendas Blablabla

Se fosse em apenas uma maquina eu poderia usar assim...

sed -i 's\/home\/blablabla\/blalbla\/saltogrande/www\.saltogrande\.com\.br/' escrit.html


Mas como sera usado em mais de uma maquina, o diretorio sera outro...
Como substituir a palavra salto grande, e tudo que vier antes... por www.saltogrande.com.br

Obrigado
ps: sugestoes de outra maneira para se fazer isso tambem sao bem vindas
Mike Pacasi
Mike Pacasi Geek Registrado
2.4K Mensagens 94 Curtidas
#2 Por Mike Pacasi
13/09/2009 - 16:14
renanlnx disse:
Preciso usar o sed para substituir expressoes irregulares...E espero que possam me ajudar.

ex:
Em um arquivo de texto(escrit.html) tem o seguinte texto

/home/blalbalbla/blalbla/saltogrande: Exemplo vendas blablabla

E quero que ele fique assim:

www.saltogrande.com.br: Blablabla

Se fosse em apenas uma maquina eu poderia usar assim...

sed -i 's\/home\/blablabla\/blalbla\/saltogrande/www\.saltogrande\.com\.br/' escrit.html


Mas como sera usado em mais de uma maquina, o diretorio sera outro...
Como substituir a palavra salto grande, e tudo que vier antes... por www.saltogrande.com.br

Obrigado
ps: sugestoes de outra maneira para se fazer isso tambem sao bem vindas
Bom, no Linux, os coringas que agem nos diretórios são os "???" por exempo para quaisquer diretórios nomeados com tres digitos e os "***" para quaisquer diretórios.

Por exemplo, vamos achar tudo que é arquivo *.conf sob quaisquer pastas tipo /etc ou /usr ou tipo /xxx:

$ ls /???/*.conf
Agora vamos achar quaisquer arquivos *.conf em quaisquer diretórios de quaisquer nomes que fiquem sob a pasta /etc/:

$ ls /etc/***/*.conf
Portanto, se o comando sed aceitar que sejam "aninhados" os coringas de pastas "???" e "***", você poderia fazer um filtro combinando vários comandos "sed" para filtrarem cada nível de pastas até digamos o terceiro ou quarto nível...Por exemplo:

sed -i 's\/home\/***\/***\/saltogrande/www\.saltogrande\.com\.br/' scrit.html &&
sed -i 's\/home\/***\/saltogrande/www\.saltogrande\.com\.br/' escrit.html &&
sed -i 's\/home\/saltogrande/www\.saltogrande\.com\.br/' escrit.html
Flw!
Ubuntu, Debian and Fedora User

Mike Pacasi
Mike Pacasi Geek Registrado
2.4K Mensagens 94 Curtidas
#5 Por Mike Pacasi
14/09/2009 - 11:31
renanlnx disse:
Mike,
No seu exemplo vc usa o curinga para representar tudo o que vem antes do .conf , como fazer isso em um arquivo de texto com o sed?
Nao sei se me entendeu mas é algo tipo assim

sed -i 's*/saltogrande/www\.saltogrande\.com\.br/' escrit.html

ps: assim nao funciona
Parece que o problema é que os arquivos terão diferentes formatos devido as diferentes estruturas de diretórios das varias maquinas. Então creio que o caminho seria primeiro ordenar o formato dos dados dos arquivos aplicando um filtro awk como aqui exemplificado.

Depois, com o arquivo padronizado, você aplica o comando sed que você mostrou no início.

Ou melhor ainda: resolver a busca e substituição apenas com awk.

Aqui tem um guia inicial para awk.

Aqui tem um exemplo que busca e substitui strings com um só comando em awk

Flw!
Ubuntu, Debian and Fedora User

© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal