У меня есть несколько текстовых файлов, которые я использую, чтобы делать заметки - просто обычный текст, обычно просто использующий cat >> file
. Иногда я использую пустую строку или две (просто возврат - символ новой строки), чтобы указать новую тему / направление мысли. В конце каждого сеанса, перед закрытием файла с помощью Ctrl+ D, я обычно добавляю лоты (5-10) пустых строк (ключ возврата) просто для разделения сеансов.
Это явно не очень умно, но для меня это работает. Я бы , однако конечный с большим и большим количеством ненужных пустых строк, поэтому я ищу способ , чтобы удалить (большинство) дополнительные строки. Есть ли Linux-команда (cut, paste, grep, ...?), Которую можно использовать напрямую с несколькими опциями? В качестве альтернативы, есть ли у кого-нибудь идея для сценария sed, awk или perl (на самом деле на любом языке сценариев, хотя я бы предпочел sed или awk), который бы делал то, что я хочу? Писать что-то на C ++ (что я на самом деле мог бы сделать сам) просто кажется излишним.
Случай № 1: Мне нужен скрипт / команда, которая удаляет более двух (3 или более) последовательных пустых строк и заменяет их всего двумя пустыми строками. Хотя было бы неплохо, если бы его также можно было настроить, чтобы удалить более одной строки (2 или более) и / или заменить несколько пустых строк одной пустой строкой.
Случай № 2: Я также мог бы использовать скрипт / команду, которая удаляла бы одну пустую строку между двумя строками текста, но оставляла несколько пустых строк как есть (хотя удаление одной из пустых строк также было бы приемлемо).
vim
один, и должен был заменить пустые строки одной пустой строкой).Ответы:
Дело 1:
Случай 2:
источник
Вы можете использовать,
uniq
чтобы свернуть несколько экземпляров пустых строк в одну пустую строку, но также будут свернуты строки, содержащие текст, если они одинаковы и расположены ниже друг друга.источник
Дело 1:
Случай 2:
источник
Вы можете обратиться к Case # 1 следующим образом с помощью GNU sed:
То есть собирать пустые строки в пространстве шаблонов, а если их больше трех или более, уменьшите их до двух строк.
Чтобы соединить строки через один интервал, как в случае № 2, вы можете сделать это следующим образом:
Или в комментариях:
источник
Это решение заботится также о последних пустых строках в файле:
источник
Следуя предложению Энтона использовать «uniq» ...
Удалите начальные, конечные и дублирующие пустые строки.
В одну длинную очередь:
Или просто используйте "кошки".
Я переключился с круглых скобок на фигурные скобки, чтобы остаться в текущем контексте оболочки, который, как я полагаю, более эффективен. Обратите внимание, что фигурные скобки требуют точку с запятой после последней команды и пробел для разделения
В одной строке.
источник
Опубликованные решения показались мне немного загадочными. Вот решение в Python 3.6:
Вы можете вызвать функции из интерпретатора или запустить его из оболочки, например:
источник