2014-10-28 2 views
-1

Я создаю скрипт для извлечения html-кода из .html-файлов в каталог, который, как оказалось, имеет не-html-код за пределами тегов html. Я хочу, чтобы выход переписывал исходные файлы.Попытка сделать сценарий bash, который извлекает html-код из файлов

Вот что у меня есть, но у меня возникли проблемы с его работой.

#!/bin/bash 

for f in `ls .`; do 
if [[ $f =~ \.html$ ]] 
then 
    cat $f | tr "\n" "|" | grep -o '<html>.*</html>' | sed 's/|/\n/g' > $f 
fi 
done 
+2

Пожалуйста дайте пример для данных и результатов, которые вам нравятся. – Jotne

+1

Вы делаете 'cat $ f | ...> $ f'. Это не сработает, и вы очистите файл '$ f'. Вместо этого используйте некоторый временный файл или другие подходы. – fedorqui

+1

Спасибо, используя файл temp. – pzoned

ответ

0
#!/bin/bash 

for f in `ls .`; do 
if [[ $f =~ \.html$ ]] 
then 
    cat $f | tr "\n" "|" | grep -o '<html>.*</html>' | sed 's/|/\n/g' > $f.temp 
    mv $f.temp $f 
fi 
done 
+0

Разбор 'ls' совершенно не рекомендуется. Вместо этого вы можете выполнить 'for f in *'. Кроме того, 'cat $ f | tr ... 'можно упростить до' tr ... <$ f' – fedorqui

0

Вы можете заменить весь сценарий с:

sed -i '/<[Hh][Tt][Mm][Ll]/,/<\/[Hh][Tt][Mm][Ll]/!d' *.html

Или, если вам не нужно быть чувствительны к регистру:

sed -i '/<html/,/<\/html/!d' *.html

Смежные вопросы