Я никогда не использую толстые клиенты типа gnome-terminal-server
только для вкладок. Xterm
легкий, универсальный и сложный. Вместе с экраном это будет делать больше, чем gnome-terminal-server
отдельно или что-то еще (Хорошо, вы можете использовать это и сscreen
). Но есть небольшая проблема не только для Xterm
. Терминалы часто используются для подключения по ssh к удаленным машинам. Если вы запустите xterm
и внутри него screen
, то в этом screen
вы сможете подключиться к удаленному компьютеру по ssh. На этой удаленной консоли мне также нравится, когда screen
работает, но здесь есть screen
в screen
, и вы не можете переключить удаленный screen
на ctrl-A
. Вы только переключаете свой первый screen
.
Вы можете открыть вторую вкладку (, не запускаяscreen
)ssh на удаленный компьютер и запустить screen
. С помощью Xterm
я просто открываю для этого второе окно и могу переключать окна с помощью Alt-Tab
, как на вкладках.
Если ваш файл представляет собой текстовый файл DOS с окончаниями строки \r\n
-, вы можете легко заменить их литеральной строкой \n
, используяtr
:
$ tr '\r\n' '\\n' <keyfile
-----BEGIN PUBLIC KEY-----\nMIIBIjANBg...etc...\n6wIDAQAB\n-----END PUBLIC KEY-----\n
(в конце вывода нет новой строки)
Комбинация аргументов для tr
заменяет каждый возврат каретки(\r
)символом \
(, который должен быть экранирован ), и каждую новую строку(\n
)символом n
.
Как указывали другие, ваша команда
sed 's/ [^PUBLIC KEY]/\\n/g'
сделать замену символов новой строки на \n
не работает, отчасти потому, что [^PUBLIC KEY]
просто означает «любой одиночный символ, не входящий в наборBCEIKLPUY
(и символ пробела )».
Чтобы сделать это с sed
, вы можете сделать что-то вроде
sed -n 's/\r$/\\/; 1{ h; d; }; H; ${ x; y/\n/n/; s/\\$/&n/; p; }' keyfile
Это предполагает, что вы используете sed
, что \r
является возвратом каретки (GNU sed
делает это, но sed
в OpenBSD не ).
Сценарий sed
сначала заменяет возврат каретки в конце текущей строки на обратную косую черту и добавляет ее к пробелу (первая строка заменяет пробел без добавления к ней символа новой строки ). Достигнув последней строки, поменяйте местами удерживаемый пробел и замените символы новой строки символом n
, а последнюю косую черту — \n
.
Результатом этого будет новая строка в конце (в отличие от результата команды tr
).
Ваше регулярное выражение не работает должным образом. Он соответствует символу пробела, за которым не следует P
, U
или B
... […]
— это класс символов, который соответствует только одному из несколько персонажей. И поскольку M
не входит в ваш класс символов, он удаляется, как и другие отсутствующие символы в вашей строке.
С помощью GNU sed
вы можете заменить все новые строки литералами \n
и удалить последний литерал \n
в конце строки:
PUB_KEY=$(sed -z 's/\n/\\n/g;s/\\n$//' keyfile)
Обратите внимание, что строка теперь не заканчивается новой строкой, но я думаю, это то, что вам нужно.