Acrescentar extensão .html ao final de todos os links em vários arquivos (com Shell Script) [RESOLVI

1. Acrescentar extensão .html ao final de todos os links em vários arquivos (com Shell Script) [RESOLVI

EVERTON DA ROSA
everton3x

(usa Debian)

Enviado em 14/05/2018 - 17:31h

Olá.

Eu tenho uma grande quantidade de arquivos HTML que possuem links no seguinte formato: http://localhost:8080/tag:alguma_coisa e eu preciso acrescentar a extensão .html a esses links para que fiquem assim: http://localhost:8080/tag:alguma_coisa.html.

Já tentei diversas combinações com finde sed mas com nenhuma delas consegui o resultado esperado.

O mais próximo do esperado foi usando:
find . -type f -name "*.htm" -exec sed '/tag:.*"/ s/tag:.*"/&.html/g' {} \; 


Com isso consegui transformar links
<a href="tag:city">city</a> 
em
<a href="tag:city".html>city</a> 
, mas o .html ficou fora das aspas (deveria ser dentro, compondo o conteúdo do atributo href.

Lembrando que o que eu preciso manipular é o código fonte de arquivos html e não o nome dos arquivos html em si.

Alguém tem alguma ideia de como fazer isso com Shell Script?




  


2. Re: Acrescentar extensão .html ao final de todos os links em vários arquivos (com Shell Script) [RESOLVI

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 14/05/2018 - 18:06h

everton3x escreveu:

Olá.

Eu tenho uma grande quantidade de arquivos HTML que possuem links no seguinte formato: http://localhost:8080/tag:alguma_coisa e eu preciso acrescentar a extensão .html a esses links para que fiquem assim: http://localhost:8080/tag:alguma_coisa.html.

Já tentei diversas combinações com finde sed mas com nenhuma delas consegui o resultado esperado.

O mais próximo do esperado foi usando:
find . -type f -name "*.htm" -exec sed '/tag:.*"/ s/tag:.*"/&.html/g' {} \; 


Com isso consegui transformar links
<a href="tag:city">city</a> 
em
<a href="tag:city".html>city</a> 
, mas o .html ficou fora das aspas (deveria ser dentro, compondo o conteúdo do atributo href.

Lembrando que o que eu preciso manipular é o código fonte de arquivos html e não o nome dos arquivos html em si.

Alguém tem alguma ideia de como fazer isso com Shell Script?



não sei se te resolve pq não sei como está a parada ai, mas minha ideia é usar o sed para substituir ( "> ) por ( .html"> ) em toda linha que tiver ( href ).


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



3. Re: Acrescentar extensão .html ao final de todos os links em vários arquivos (com Shell Script) [RESOLVI

EVERTON DA ROSA
everton3x

(usa Debian)

Enviado em 15/05/2018 - 08:08h

Mauriciodez: Não dá pra usar essa técnica de substituir o
"> 
porque não sei se o href corresponde ao final da tag nem mesmo se existe ou não espaço entre as aspas e o fechamento de tag.


4. Re: Acrescentar extensão .html ao final de todos os links em vários arquivos (com Shell Script)

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 15/05/2018 - 14:23h

everton3x escreveu:

Mauriciodez: Não dá pra usar essa técnica de substituir o
"> 
porque não sei se o href corresponde ao final da tag nem mesmo se existe ou não espaço entre as aspas e o fechamento de tag.


fiz uma gambiarra do k7 para fazer um padrão ... v se te da alguma idéia

remove todos ' espaços ' que tiver no final das linhas
sed -i 's/ *$//g' arquivo 

substitui ' href ' por ' quebra de linha + href '
sed -i 's/href/\nhref/g' arquivo 

substitui a 2ª ocorrência de ' aspas duplas ' das linhas que comecem com ' href ' por ' .html" '
sed -i '/^href/ s/"/.html"/2' arquivo 

junta a linha começada com ' <a ' com a de baixo
sed -i '/<a/ N;s/\n//' arquivo 


agora é só vc montar um script com um loop básico nos arquivos !!!

EDIT: no caso ... esse comando nem precisa, não lembro pq eu o fiz... kkkkkkk
sed -i 's/ *$//g' arquivo 


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



5. Re: Acrescentar extensão .html ao final de todos os links em vários arquivos (com Shell Script) [RESOLVI

EVERTON DA ROSA
everton3x

(usa Debian)

Enviado em 15/05/2018 - 17:08h

Com uma pequena adaptação para pegar apenas os href cujo alvo contenha
tag: 
, funcionou quase perfeito, porém me dei conta de que em links que tem # como em
href="tag:alguma_coisa#inicio" 
ele está colocando como
href="tag:alguma_coisa#inicio.html" 
quando o correto seria
href="tag:alguma_coisa.html#inicio" 



6. Re: Acrescentar extensão .html ao final de todos os links em vários arquivos (com Shell Script) [RESOLVI

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 15/05/2018 - 17:17h

everton3x escreveu:

Com uma pequena adaptação para pegar apenas os href cujo alvo contenha
tag: 
, funcionou quase perfeito, porém me dei conta de que em links que tem # como em
href="tag:alguma_coisa#inicio" 
ele está colocando como
href="tag:alguma_coisa#inicio.html" 
quando o correto seria
href="tag:alguma_coisa.html#inicio" 


velho ... seguinte ... não tem como fazer as paradas sem primeiro saber o q tem q ser feito ... faz o seguinte ... coloca todas as variantes possíveis de link, posta aqui q a gente bola uma ideia .

naquela parada que te passei no post anterior, olha só como seria
#!/bin/bash
for x in `ls *.html`
do
cat $x | sed 's/href/\nhref/g' | sed '/^href/ s/"/.html"/2' | sed '/<a/ N;s/\n//' > $x.novo
mv $x.novo $x
done


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



7. Re: Acrescentar extensão .html ao final de todos os links em vários arquivos (com Shell Script) [RESOLVI

EVERTON DA ROSA
everton3x

(usa Debian)

Enviado em 16/05/2018 - 08:12h

Após mais testes e algumas modificações consegui fazer funcionar com o seguinte código:

find $OUTPUTDIR -type f -name "*.html" | xargs sed -i 's/href/\nhref/g' # quebra todos as tag A para que href comece uma nova linha
find $OUTPUTDIR -type f -name "*.html" | xargs sed -i '/^href=".*tag:.*[^#]/ s/"/.html"/2' # coloca .html ao final do valor de href para links com padrão tag:* mas que não tem #
find $OUTPUTDIR -type f -name "*.html" | xargs sed -i '/^href=".*tag:.*#/ s/#/.html#/1' # coloca .html antes do # para links no padrão tag:* com #
find $OUTPUTDIR -type f -name "*.html" | xargs sed -i '/<a/ N;s/\n//' # junta href nba mesma linha de tag


Muito abrigado Marcelodez. Sua ajuda foi DEZ -- desculpe o trocadilho ;)


8. Re: Acrescentar extensão .html ao final de todos os links em vários arquivos (com Shell Script)

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 16/05/2018 - 13:13h

everton3x escreveu:

Após mais testes e algumas modificações consegui fazer funcionar com o seguinte código:
...


Bom que resolveu a parada aí campeão ... só faltou vc marcar o tópico como 'resolvido' e depois marcar uma 'melhor resposta'.

Abçs.

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts