$ rmlint --types duplicatedirs
Это выведет список дублирующихся каталогов и создаст сценарий оболочки (rmlint.sh), который вы можете запустить для их удаления.
Инструкции по установке и т. д. см. в руководстве пользователя.
Эта команда sed
должна помочь вам:
sed -e ':1;/<font>[[:space:]]*$/{N;s#<font>[[:space:]]\+</font>#<font></font>#g;b1}' file
Команда ищет тег
, который до конца строки следует пробел. Затем в пространство шаблона втягивается следующая линия; затем выполняется замена возможно существующей последовательности [[: space:]] \ +
и сценарий перезапускается с начала. Если пространство шаблонов не соответствует адресу / [[: space:]] * $ /
, то есть после тега
присутствует некоторый непространственный контент , затем пространство шаблонов распечатывается и очищается концом сценария sed
, и процесс перезапускается.
Изменить : Измерение производительности.
Я заполнил файл следующим содержанием, повторенным 10k раз:
<font>
dejidewji
</font>
<font>
</font><font>
</font>
всего, 620Kb. Время выполнения сценария выше на 1.4Gz A8-4500M:
real 0m0.361s
user 0m0.356s
sys 0m0.005s
Edit2 :
Последнее обновление вашего вопроса намного проще решить с помощью perl
, а производительность в 10 раз лучше, как показал другой ответ:
perl -0777 -pe 's|<font>\s+|<font>|g;s|\s+</font>|</font>|g' file
Благодарности за @spasic
$ cat ip.html
<font>
This is a text
</font>
123
<font>
</font>
xyz
<font>
</font>
ijk
<font>
</font>
789
perl
решение, -0777
отбрасывает весь файл
$ perl -0777 -pe 's|<font>\n*([^\n]*)\n*</font>|<font>$1</font>|g' ip.html
<font>This is a text</font>
123
<font></font>
xyz
<font></font>
ijk
<font></font>
789