Копирование второго шаблона вхождения в новый файл в sed

Оказывается, в файле были управляющие символы, а именно: ^ 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 /.* (Чтение / (Чтение /'

(... ожидание подтверждения, если он отправит сообщение)

1
25.11.2018, 16:27
2 ответа

Еще один sed, если мы не можем найти END после blah2

sed ':A;$bB;/BEGIN CERTIFICATE/!d;N;/END CERTIFICATE/!bA;h;$!d;:B;x;w public.cer' intermediate.cer
1
27.01.2020, 23:23

Вместо того, чтобы записывать напрямую в файл, вы можете собрать все сертификаты в области хранения с помощью H, затем в последней строке($!dостанавливает обработку для всех строк, кроме последней, поэтому все, что после этого делается только для последней строки )переместите пробел в пространство шаблона с помощью gи удалите то, что вы хотите удалить, прежде чем писать:

sed -n '/BEGIN CERTIFICATE/,/END CERTIFICATE/H;$!d;g;s/.*\(---BEGIN\)/\1/;w public.cer'
1
27.01.2020, 23:23

Теги

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