Замена совпадающего текста после двух совпадающих строк

Если ssh на jumpstation поддерживает аргумент '-W', вы можете связать его:

В ~ / .ssh / config :

Host 10.144.108.127
    ProxyCommand ssh -q user@jumpstation -W %h:%p

И в командной строке портативного компьютера:

ssh -R PORT_WITH_INTERNET:localhost:PORT_WITH_INTERNET user@10.144.108.127

Вам также необходимо запустить прокси на вашем портативном компьютере и установить соответствующие настройки прокси на удаленном компьютере.

Даже если jumpstation ssh не поддерживает аргумент '-W' (в чем я сомневаюсь), это можно обойти, вызвав netcat на jumpstation или даже открыв / dev / tcp /. .. и пара кота (если там у вас есть bash).

2
10.11.2015, 15:16
1 ответ
sed "
  /^admin::common::passwords:$/,/^[^ ].*:$/ {
     /^  $ACCOUNT:$/ {
       N;d
     }
  }" < "$YAML"

То есть заключите вашу удаляющую строфу в раздел, соответствующий между admin :: common ... и следующим any-section: .

Помните, что . Символ , часто встречающийся в именах пользователей, также является оператором регулярного выражения, поэтому john.doe будет соответствовать john.doe , но также, например, johnWdoe .

Обратите внимание, что приведенное выше не будет работать, если у вас есть два последовательных раздела admin :: common :: passwords , а учетная запись для удаления находится во втором разделе.

Если как Отеус указывает , разделы будут выполняться до следующей строки, которая имеет такое же или меньшее количество начальных пробелов, и ваш раздел admin :: common :: passwords: может есть несколько ведущих пробелов, то, вероятно, пора переключиться на другой язык, например awk :

awk -v account="$ACCOUNT" '
  match($0, /[^ ]/) && RSTART <= n {n = 0}
  n && NF == 1 && $1 == account ":" {getline; next}
  !n && /^ *admin::common::passwords:$/ {
    match($0, /[^ ]/)
    n = RSTART
  }
  {print}' < "$YAML"
2
27.01.2020, 22:04

Теги

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