/^[A-Z]/ { if (line) { print line }; line = $0 }
/^ / { sub(/ /, "") ; line = line $0 }
END { if (line) { print line } }
Этот awk
скрипт создаст
LIN This is the value which I need from this line which has a very long line
SHR This1;This2;This3;
GYC This is an extra.
учитывая данные, представленные в вопросе в file.in
.
Первый блок будет выполняться для каждой строки, которая начинается с символа ASCII в верхнем регистре. Он выведет содержимое line
, если в нем что-то есть, а затем сохранит текущую строку ввода в line
. Это заботится о выводе построенной строки для предыдущего входного «блока» и начинает сборку следующей выходной строки.
Второй блок будет выполняться для каждой строки, в начале которой есть хотя бы один пробел, и удалит первые пять пробелов, прежде чем добавить их в конец line
. Это строит выходную строку из строк продолжения на входе.
Блок END
выводит сохраненный line
, если в нем что-то есть. Это заботится о выводе собранной строки из последнего «блока» ввода.
Вы запускаете это с
$ awk -f script.awk file.in
Этот скрипт обрабатывает случаи, когда может быть несколько строк с отступом (продолженных ).
В просто обрабатывает все, что получает А.A должен выбрать, где получить данные в зависимости от его данных. Ясно, что только A должен иметь туннельDynamicForward , роль B — просто промежуточный хост для подключения. Обычно B должен требовать только классическогоLocalForwardдля предоставления запросов A.
Это можно сделать по-разному, но самый простой и безопасный метод использует преимущество функцииProxyJump , которая покажет A, как если бы он был доступен напрямую, таким образом, больше не требуется обдумывать, как B будет взаимодействовать с предполагаемой переадресацией портов. Можно считать B почти невидимым. Итак, в итоге приведенную ниже конфигурацию можно поместить в~/.ssh/config
:
Host B
User userb
Host A
User usera
ProxyJump B
DynamicForward 1081
Вызывается только с:
ssh A
Без файла конфигурации эквивалентная командная строка будет:
ssh -D 1081 -J userb@B usera@A
ОБНОВЛЕНИЕ:должно быть версия ssh старше 7.3 (, как это представляется для OP ), ProxyJump все еще можно заменить наProxyCommand+ ssh -W вот так:
как файл конфигурации~/.ssh/config
:
Host B
User userb
Host A
User usera
ProxyCommand ssh -W %h:%p B
DynamicForward 1081
или без конфигурационного файла эквивалентная командная строка:
ssh -D 1081 -o 'ProxyCommand ssh -W %h:%p userb@B' usera@A
API-интерфейс SOCKS5 будет доступен на клиенте как localhost:1081
(, если только не будет возвращен0.0.0.0:1081
(или использованыпорты шлюза /-g ), чтобы сделать его доступным для других клиентов ). Под капотом, управляемый парой каналов, порожденный процесс sub ssh установит туннель через хост B и представит ssh-сервер A исходной ssh команде :весь ssh туннелируется, поэтому нет необходимости настраивать дополнительную переадресацию портов.