O ideal é que isso seja feito em uma linguagem como perl
ou python
, que tem boas bibliotecas de análise de HTML. Mas se você quiser fazer isso em um shell script, você pode instalar o pacote xml2 , que fornece ferramentas chamadas html2
e 2html
para converter HTML para e de um formato de arquivo simples adequado para uso com ferramentas orientadas a linha como sed
, grep
, awk
, etc.
Ele também contém ferramentas semelhantes para trabalhar com arquivos XML e CSV.
Em seguida, você pode usar sed
para transformar espaços correspondentes a img src
lines em traços. Em seguida, converta de volta para html.
Por exemplo, usando sua linha HTML de amostra:
$ cat file.html
<img class="photo" width="400" height="600" src="/images/red roses in summer 54.jpg" alt="">
$ html2 < file.html | sed -e '\:/img/@src=/images/: s/ /-/g' | 2html
<html><body><img class="photo" width="400" height="600" src="/images/red-roses-in-summer-54.jpg" alt="">
Redirecione a saída dessa para, por exemplo, file.new.html
. e, em seguida, mv -f file.new.html file.html
se você quiser substituir o arquivo original pela versão modificada. Eu recomendo strongmente manter uma cópia de backup dos arquivos originais para que você possa reverter para um bom ponto de partida se cometer um erro.
BTW, o formato de arquivo simples produzido por html2
é assim:
$ html2 < file.html
/html/body/img/@class=photo
/html/body/img/@width=400
/html/body/img/@height=600
/html/body/img/@src=/images/red roses in summer 54.jpg
/html/body/img/@alt
xml2
é empacotado para o Debian e Ubuntu e provavelmente outras distribuições do Linux. Se não estiver disponível pré-empacotado para seu unix, você pode encontrar o código-fonte no link acima.
Existem muitas maneiras de fazer essas alterações em vários arquivos. Aqui está um exemplo simples de for
loop.
for htmlfile in *.html ; do
html2 < "$htmlfile" |
sed -e '\:/img/@src=/images/: s/ /-/g' |
2html > "$htmlfile.new" \
&& mv -f "$htmlfile.new" "$htmlfile"
done
AVISO: teste que isso faz o que você espera antes de executá-lo em vários arquivos HTML. E mantenha um backup dos originais. Se o HTML em seus arquivos não for HTML completamente válido (ou seja, se ele não passar em um verificador de sintaxe HTML), então html2 | ... | 2html
poderá tornar seus arquivos html ainda mais quebrados do que eles já são.
Se houver muitos arquivos ou os arquivos estiverem em vários subdiretórios, você precisará usar find ... -exec
. Existem inúmeros exemplos de uso de find
neste site.