msmtp :не может отправить сообщение :Процесс завершен с не -нулевым статусом

Можно просто использоватьed

ed -s infile <<\IN
.t.
1,?===?d
$d
,p
q
IN

Как это работает:tдублирует текущую(.)строку -, которая всегда является последней строкой при запуске ed(на тот случай, если разделитель присутствует в последней строке ), 1,?===?dудаляет все строки до предыдущего совпадения включительно(edостается в последней строке )затем $dудаляет (дубликат )последнюю строку, ,pпечатает текстовый буфер (заменить с wдля редактирования файла на месте )и, наконец, qвыход ed.


Если вы знаете, что во входных данных есть хотя бы один разделитель (, и вам все равно, напечатан ли он ), тогда

sed 'H;/===/h;$!d;x' infile

будет короче.
Как это работает :добавляет все строки в Hстарый буфер, перезаписывает hстарый буфер при обнаружении совпадения, dудаляет все строки, кроме одной $t, когда он xизменяет буферы (и автопечатает ).

2
11.03.2021, 10:23
0 ответов

Теги

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