Манипуляция историей BASH: поиск и замена

Манипуляция историей BASH: поиск и замена

В BASH есть очень удобная функция расширения параметров/переменных, которую я не вижу в истории. Я проверил man-страницы на предмет истории и самого BASH. Там нет...может я пропустил.

Пример: Я часто использую SSH и могу сделать это с помощью расширения переменной.

[email protected]

Предположим, я хочу извлечь только хост, а не имя пользователя.

hostonly=${host##*@}

Если я

echo $hostonly

Я получил:

bar.org

Мой вопрос: Можно ли это сделать с помощью истории командной строки?

например.,

Команда 1:

ssh [email protected]

Команда 2:

ssh gary@!!:##*@

Конечно, это не работает, но может ли кто-нибудь подтвердить, доступен ли такой тип сопоставления с образцом?

Спасибо!

Бубнофф

решение1

Изящный трюк, который часто упускают из виду люди, — это rкоманда (которая сама по себе является частным случаем команды fc):

$ ssh [email protected]
(...)
$ r foo=baz

Более общий случай:

$ fc -s foo=bar ssh

который позволяет вам выбрать команду из истории по подстроке, затем выполнить указанную замену и запустить ее. Если вы опустите -s, он загрузит команду в $EDITORдля более сложной модификации; редактирование командной строки в основном делает это ненужным, но есть некоторые изменения, которые трудно сделать в командной строке.

Вы также можете выполнять довольно сложные манипуляции, используя !синтаксис ссылок на историю, но по историческим причинам (базовый механизм истории был создан ранними, cshи все усовершенствования в основном сохранили совместимость) он использует другой синтаксис. Смотритездесьдля получения подробной информации.

решение2

$ ssh [email protected]
...
$ ^foo^gary^
...

Команда повторяется с использованием имени пользователя "gary" вместо "foo". Следующее работает так же:

$ ssh [email protected]
...
$ !!:s/foo/gary/
...

Связанный контент