Как удалить символ новой строки между двумя строками \n в unix?

$ rmlint --types duplicatedirs 

Это выведет список дублирующихся каталогов и создаст сценарий оболочки (rmlint.sh), который вы можете запустить для их удаления.

Инструкции по установке и т. д. см. в руководстве пользователя.

0
05.09.2016, 08:04
2 ответа

Эта команда 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

2
28.01.2020, 02:27
$ 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
1
28.01.2020, 02:27

Теги

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