Замените пробел новой строкой, кроме пробела, заключенного в специальные символы - PullRequest
0 голосов
/ 25 апреля 2018

В оболочке у меня есть переменная, хранящая закрытый ключ, но каждый символ новой строки в оригинальном закрытом ключе теперь заменяется пробелом, поэтому переменная выглядит следующим образом:

PK="-----BEGIN RSA PRIVATE KEY----- aaa bbb ccc ... zzz -----END RSA PRIVATE KEY-----"

Теперь мне нужно перенаправитьстрока в файл, и мне нужно заменить пробел символом новой строки.Но если я просто запускаю echo $PK | tr " " "\n" > key, пробелы в BEGIN RSA PRIVATE KEY и END RSA PRIVATE KEY также будут заменены символом новой строки, поэтому я получаю странный файл, похожий на:

-----BEGIN
RSA
PRIVATE
KEY-----
aaa
bbb
ccc
...
zzz
-----END
RSA
PRIVATE
KEY-----

Поэтому мой вопрос заключается в том, как заменитьпробел с новой строкой в ​​теле ключа и оставьте пробел внутри ----- без изменений.Что я ожидаю получить это:

-----BEGIN RSA PRIVATE KEY-----
aaa
bbb
ccc
...
zzz
-----END RSA PRIVATE KEY-----

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Хотя это не точный ответ, который вы ищете, я думаю, это то, что вы действительно пытаетесь сделать:

Чтобы захватитьзакрытый ключ в переменной, сделайте так:

PK="$(cat ~/.id_rsa)" # or whatever command you're getting the key from

Затем, чтобы выгрузить его в файл:

echo "$PK" > key # notice the additional quotes

Дополнительные кавычки при echo возвращении переменной сохраняют символы новой строкизахватывается на входе.Нет sed / awk / tr требуется магия.

ссылка: Захват многострочного вывода в переменную Bash

0 голосов
/ 25 апреля 2018

Используя gnu-awk, вы можете сделать это:

awk -v RS='-+(BEGIN|END) RSA PRIVATE KEY-+' '{
gsub(/ +/, "\n"); ORS=RT} 1' <<< "$PK"

-----BEGIN RSA PRIVATE KEY-----
aaa
bbb
ccc
...
zzz
-----END RSA PRIVATE KEY-----
  • Используя -v RS='-+(BEGIN|END) RSA PRIVATE KEY-+' мы устанавливаем разделитель входной записи как BEGIN или END маркеры.
  • Используя gsub, мы заменяем все пробелы символами новой строки в основном теле.
  • Используя ORS=RT, мы возвращаем верхний и нижний колонтитулы в выходные данные.

Альтернатива gnu sed решение:

sed -E 's/(-+(BEGIN|END) RSA PRIVATE KEY-+) *| +/\1\n/g' <<< "$PK"

-----BEGIN RSA PRIVATE KEY-----
aaa
bbb
ccc
...
zzz
-----END RSA PRIVATE KEY-----
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...