В идеале это должно быть сделано на таких языках, как perl
или python
, которые имеют хорошие библиотеки синтаксического анализа HTML. Но если вы хотите сделать это в сценарии оболочки, вы можете установить пакет xml2 , который предоставляет инструменты под названием html2
и 2html
для преобразования HTML в и из формат плоских файлов, подходящий для использования с линейно-ориентированными инструментами, такими как sed
, grep
, awk
и т. д.
Он также содержит аналогичные инструменты для работы с файлами XML и CSV.
Затем вы можете использовать sed
для преобразования пробелов в совпадающих строках img src
в тире. Затем конвертируйте обратно в HTML.
Например, используя образец строки html:
$ cat file.html
$ html2 < file.html | sed -e '\:/img/@src=/images/: s/ /-/g' | 2html
Перенаправьте вывод из него, например, в file.new.html
. а затем mv -f file.new.html file.html
, если вы хотите заменить исходный файл измененной версией. Я настоятельно рекомендую сохранить резервную копию исходных файлов, чтобы в случае ошибки можно было вернуться к заведомо хорошей отправной точке.
Кстати, формат плоских файлов, созданный html2
, выглядит следующим образом:
$ 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
упакован для Debian и Ubuntu и, возможно, других дистрибутивов Linux. Если он недоступен в готовом виде для вашего unix, вы можете найти исходный код по ссылке выше.
Есть много способов внести эти изменения во множество файлов. Вот простой пример цикла для
.
for htmlfile in *.html ; do
html2 < "$htmlfile" |
sed -e '\:/img/@src=/images/: s/ /-/g' |
2html > "$htmlfile.new" \
&& mv -f "$htmlfile.new" "$htmlfile"
done
ВНИМАНИЕ: проверьте, что это делает то, что вы ожидаете , прежде чем запускать его на большом количестве файлов HTML.И сохраните резервную копию оригиналов. Если HTML в ваших файлах не является полностью допустимым HTML (т.е. если он не проходит проверку синтаксиса HTML), то html2 | ... | 2html
может сделать ваши HTML-файлы еще более поврежденными, чем они есть.
Если файлов слишком много или файлы находятся в нескольких подкаталогах, вам придется использовать find ... -exec
. Есть бесчисленное множество примеров использования find
здесь, на этом сайте.