Относительно этого дубликата: есть аналогичные вопросы, такие как https://unix.stackexchange.com/questions/76061/can-sed-remove-double-newline-characters или https://stackoverflow.com/questions/27510462/how-can-i-remove-double-line-breaks-with-sed - в популярном первом, хотя исходный вопрос, вероятно, такой же, как мой, его принятый и наиболее обсуждаемый вопрос удаляет все пустые строки, а не только когда Есть 2 или более вместе ", как заданный вопрос. Некоторые комментарии жалуются на то, что этот ответ, а другие ведут себя таким образом, но никаких ответов не дано, чтобы оставить одну пустую строку. Некоторые другие ответы превращают дублирующиеся пустые строки в одну пустую строку (сжимая), а не удаляя их полностью.
Я ищу способ написания сценариев для удаления спина к спине пустых строк, но оставить там пустые строки.
Я ищу, чтобы автоматически очистить файлы .srt
(субтитры). Формат требует, чтобы новые строки были между разделами субтитров (что отображать в определенный промежуток времени.) Обычно, если нужно отобразить 2 строки одновременно, у автора субтитров просто есть 2 строки. Есть еще один стиль, который используют некоторые авторы для размещения 2 пустых строк между отображаемыми строками. На моем устройстве это приводит к отображению только первой строки и, по-видимому, к отображению второй строки вне телевизора.
Итак, я хотел бы изменить это:
1
00:00:01,800 --> 00:00:03,802
First line is here
Second line is here
2
...
В это:
1
00:00:01,800 --> 00:00:03,802
First line is here
Second line is here
2
...
Не то чтобы это, вероятно, нужно обрабатывать по-другому, но формат файла требует, чтобы в нижней части файла была пустая строка, которую нужно оставить там.
Я хочу, чтобы это сработало, возможно, сначала удаляя конечные пробелы, а затем удаляя только все пустые строки, которые касаются другой пустой строки. Я не хочу, чтобы он был привязан к остальному формату .srt
, например, к количеству строк между пронумерованными разделами. (Я думал, что все пустые строки могут быть удалены, и новые строки могут быть добавлены обратно в строки, содержащие только числовые символы, но я надеюсь сохранить его более общим, игнорируя фактический формат .srt
.)
Кроме того, если по какой-то причине .srt
содержит более 2 строк текста, я бы хотел, чтобы он оставался таким.
Так что, возможно, что-то вроде:
cat some.srt | sed 's/[ \t]*$//' | SOMETHING_ELSE
Я бы предпочел решение bash
, sed
или awk
а не perl
. Если я правильно понимаю, я думаю, что awk
будет проще реализовать, нежели sed
, поскольку он многострочный.