В качестве альтернативы очень эффективное, но немного более сложное решение
sed 'G;s/;/\n/' | awk -F= '
$1~/apiKey/ {key=$2}
$1~/term/ {term=$2}
/^$/ {printf(" apiKey=%s term=%s\n", key, term)
key=""
term=""}'
Сначала sed используется для двух вещей: команда «G» эффективно добавляет открытую строку после каждого «набора записей», а во-вторых, «заменяет» команда ( s /; / \ n /
) эффективно расширяет каждый набор записей до одной на строку, заменяя каждый ;
символом новой строки. Что выходит из sed, так это пары ключ-значение, по одной на строку, с открытой строкой, обозначающей конец каждой записи.
Затем awk нужно только просмотреть первое поле, чтобы найти интересующие вас атрибуты, и второе поле для значения, что устраняет необходимость в index и substr. Как только awk встречает «открытую строку», он печатает найденные значения. В целях устойчивости вы можете «очистить» значения в конце каждой записи. Обратите внимание на использование -F =
для указания awk разбить строку на поля на основе знака =
.
$ 1 ~ /.../
означает: «Когда первое поле соответствует значению /.../
, оно затем присваивает значение переменной (ключу или термину)
/ ^ $ /
означает «когда awk встречает открытую строку»
Я добавил несколько .bash_aliases
для входа в различные системы:
alias mj='mosh j3710'
alias m3='mosh 3770k'
etc.
etc.
Я пытался добавить их в /etc/hosts
, но это не сработало. Я уверен, что, вероятно, есть более аккуратный способ сделать это, но если ничего не будет предложено в течение следующих нескольких дней, я отмечу это как ответ.
zsh
имеет отличную функциональность автозаполнения. Установите zsh и убедитесь, что завершение установки (инструкции здесь). Части, связанные с ssh, которые вы хотите в своем.zshrc
:
zstyle ':completion:*:ssh:*' hosts
compdef mosh=ssh
Первая строка позволит вам разрешить завершение имен хостов с помощью табуляции в ответ на ssh
. Вторая строка также расширяет те же расширения имени хоста до mosh