Я использую Ubuntu 18.04 LTS. У меня есть текстовый файл с именем "group_keys", который содержит несколько открытых ключей, которые я хотел бы разделить на основе разделителя

-----BEGIN PUBLIC KEY-----

И затем выведите каждую клавишу по отдельности и последовательно. Например, если есть три ключа, то на выходе будут три файла с именами, такими как «person_1_key», «person_2_key» и «person_3_key».

Файл выглядит так: введите описание изображения здесь

Мне трудно использовать split и csplit для этого. Команды, которые я ввожу, не работают. Вот что я пробовал;

Используя split:

split --separator="-----BEGIN PUBLIC KEY-----" group_keys

Это ничего не выводит, но вместо этого дает мне сообщение

split: multi-character separator ‘-----BEGIN PUBLIC KEY-----’

Использование csplit:

csplit group_keys "-----BEGIN PUBLIC KEY-----"

Это дает мне только два файла, «xx00» и «xx01», но это не разделяет строки. «xx00» является полностью пустым, а «xx01» - просто исходный файл.

0
WaterGuy 7 Фев 2020 в 21:46

2 ответа

Лучший ответ

Пытаться

csplit -z -f person_ -b '%d_key' group_keys '/-----BEGIN PUBLIC KEY-----/' '{*}'

Который выведет четыре файла person_0_key, person_1_key, person_2_key, person_3_key, где

  • -z подавляет генерацию пустых файлов
  • -f person_ устанавливает префикс выходного имени файла
  • -b '%d_key' устанавливает суффикс выходного имени файла
  • '{*}' устанавливает количество повторов (повторение столько раз, сколько возможно)
3
Freddy 7 Фев 2020 в 19:30

Это должно работать:

awk '/-----BEGIN PUBLIC KEY-----?/{n++}{print > "person_" n "_key" }' group_keys

3
Shivam Mohan 7 Фев 2020 в 18:53