Оказывается, в файле были управляющие символы, а именно: ^ M
cat
не отображал ^ M - но меньше
отображал ..
меньше
вывод выглядит следующим образом:
Get:3 http://us.archive.ubuntu.com/ubuntu/ vivid-updates/main policykit-1 amd64 0.105-8ubuntu3 [51.6 kB]
Fetched 102 kB in 0s (144 kB/s)
Selecting previously unselected package libpolkit-agent-1-0:amd64.
(Reading database ... ^M(Reading database ... 5%^M(Reading database ... 10%^M(Reading database ... 15%^M(Reading database ... 20%^M(Reading database ... 25%^M(Reading database ... 30%^M(Reading database ... 35%^M(Reading database ... 40%^M(Reading database ... 45%^M(Reading database ... 50%^M(Reading database ... 55%^M(Reading database ... 60%^M(Reading database ... 65%^M(Reading database ... 70%^M(Reading database ... 75%^M(Reading database ... 80%^M(Reading database ... 85%^M(Reading database ... 90%^M(Reading database ... 95%^M(Reading database ... 100%^M(Reading database ... 52099 files and directories currently installed.)
Preparing to unpack .../libpolkit-agent-1-0_0.105-8ubuntu3_amd64.deb ...
Unpacking libpolkit-agent-1-0:amd64 (0.105-8ubuntu3) ...
Обратите внимание, что строка «(Reading database» - это одна длинная строка (с ^ M).
Удаление строки с помощью sed
удаляет всю строку, теперь очевидно, почему .
sed
string replace подтверждает части строки, поэтому ее можно использовать для разбиения строки.
Вот что завершилось работой (^ M это \ r в строке):
sed -i 's/(Reading database \.\.\. [0-9]%\r//g' ~/Desktop/Log
sed -i 's/(Reading database \.\.\. [0-9][0-9]%\r//g' ~/Desktop/Log
sed -i 's/(Reading database \.\.\. [0-9][0-9][0-9]%\r//g' ~/Desktop/Log
sed -i 's/(Reading database \.\.\. \r//g' ~/Desktop/Log
sed -i '/^\s*$/d' ~/Desktop/Log
Это заменяет указанную часть строки на «ничего», последняя строка удаляет строки с «ничем» ... так что результат:
Get:3 http://us.archive.ubuntu.com/ubuntu/ vivid-updates/main policykit-1 amd64 0.105-8ubuntu3 [51.6 kB]
Fetched 102 kB in 0s (144 kB/s)
Selecting previously unselected package libpolkit-agent-1-0:amd64.
(Reading database ... 52099 files and directories currently installed.)
Preparing to unpack .../libpolkit-agent-1-0_0.105-8ubuntu3_amd64.deb ...
Unpacking libpolkit-agent-1-0:amd64 (0.105-8ubuntu3) ...
Я уверен, что есть более простой способ, но ни один из моих экспериментов не сработал, включая группировку ( {[0-9], [0-9] [0-9], [0-9] [0-9] [0-9]}
) и т. Д.…
После часов возиться с этим, я готов принять свой пространный ответ .. :)
Обновление
Пользователь don_crissti имеет более эффективное решение, которое дает то же самое результат:
sed 's /.* (Чтение / (Чтение /'
(... ожидание подтверждения, если он отправит сообщение)
Еще один sed, если мы не можем найти END после blah2
sed ':A;$bB;/BEGIN CERTIFICATE/!d;N;/END CERTIFICATE/!bA;h;$!d;:B;x;w public.cer' intermediate.cer
Вместо того, чтобы записывать напрямую в файл, вы можете собрать все сертификаты в области хранения с помощью H
, затем в последней строке($!d
останавливает обработку для всех строк, кроме последней, поэтому все, что после этого делается только для последней строки )переместите пробел в пространство шаблона с помощью g
и удалите то, что вы хотите удалить, прежде чем писать:
sed -n '/BEGIN CERTIFICATE/,/END CERTIFICATE/H;$!d;g;s/.*\(---BEGIN\)/\1/;w public.cer'