Причина Ваш sed
отказавший то, что, если Вы не указываете многострочный оператор, он управляет на потоке одной строкой за один раз. Несколько начало строки ^
и конец строки $
операторы бессмысленны при строковом представлении вместе как этот, если Вы только смотрите на текст одна строка за один раз.
easist способ свернуть несколько пустых строк с cat
. Из страницы справочника:
- s, - сжимать-пробел
подавите повторенные пустые выходные строки
Это работает как это:
$ echo -e "hello\n\n\nworld" | cat -s
hello
world
Если Вы хотите удалить пустые строки полностью вместо того, чтобы сжать их, использовать grep
:
$ echo -e "hello\n\n\nworld" | grep -v '^$'
hello
world
Обратите внимание на это, если Вы действительно хотите выполнить в этом sed
необходимо использовать сложные выражения и действия. Вот пример (благодаря fred), который сворачивает любое количество пробелов sequencial в единственную пустую строку:
$ echo -e "hello\n\n\nworld" | sed -re '$!N;/^\n$/!P;D'
hello
world
Вы видите почему cat -s
намного легче, если сворачивание нескольких пустых строк является всем, что Вы после!
В моем случае у меня была та же проблема, потому что задание cron выполнялось каждую минуту, но не завершалось. В результате были созданы сотни процессов, каждый из которых работал в оболочке, изнуряющей систему.
Поэтому проверьте с помощью ps ax
, если вы видите много повторяющихся процессов, возможно, проверьте ваши задания cron или что-то еще, что может запускать кучу дополнительных оболочек.