erge
@erge
Примус починяю

Как в sed сделать несколько последовательных замен?

Как сделать именно последовательные замены в одном sed чтобы можно было применить сразу к файлу через ключ -i ?

Есть такое (причесывание HTML таблицы в CSV):
sed -e '/\(html\|title\|body\|table\)/d' -e 's/ \{2,\}//g' /dev/shm/ex01.html | \
  sed ':a;N;$!ba;s#\s*</td>\s*</tr>\s*<tr>\s*<td>\s*#\n#g' | \
  sed ':b;N;$!bb;s#\s*</td>\s*<td>\s*#;#g' | \
  sed '/\(tr>\|<td\|td>\)/d'


полный пример здесь

Есть какие-то способы это в один sed выполнить? через -e не получается, не работает последующий ':b;N;$!bb;s#\s*</td>\s*<td>\s*#;#g' , да и удаление почему-то работает только в начале файла, в конце не удаляет.
PS: на разделители # не смотрите, это сейчас в конкретном примере они такие.
  • Вопрос задан
  • 367 просмотров
Решения вопроса 1
erge
@erge Автор вопроса
Примус починяю
в принципе разобрался...

после команд
:a;N;$!ba
весь текст становится одной строкой, поэтому немного по другому надо регулярки, см. ниже:
sed '/title/d
     :a;N;$!ba
     s/ \{2,\}//g
     s#\s*</td>\s*</tr>\s*<tr>\s*<td>\s*#\n#g
     s#\s*</td>\s*<td>\s*#;#g
     s/<[^>]\+>//g
     s/\n\{2,\}//g' /dev/shm/ex01.html


UPDATE

конечный вариант в итоге такой:
### Convert HTML to CSV
sed ':a;N;$!ba
     s/<html.\+<table[^>]\+>//Ig
     s#\s*</td>\s*</tr>\s*<tr>\s*<td>\s*#\n#Ig
     s#\s*</td>\s*<td>\s*#;#Ig
     s/<[^>]\+>//g;s/\s\{2,\}//g' somreport.html


пример здесь
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы