Представьте ситуацию: вы ввели длинную и сложную команду, нажали Enter и обнаружили досадную опечатку. Например, вместо правильного вызова утилиты вы случайно перепутали раскладку или символы:

find /var/log -name "*.log" | xargs gпреп -l "error"

Вместо того чтобы нажимать клавишу «вверх», перемещать курсор и исправлять ошибку вручную, можно воспользоваться быстрым механизмом замены в Bash.

Магия синтаксиса ^old^new^

Просто введите следующую конструкцию:

^gпреп^grep^

Оболочка автоматически возьмет последнюю выполненную операцию, заменит в ней ошибочную строку gпреп на правильную grep и тут же запустит ее на выполнение. Это значительно экономит время при работе в терминале.

Как это работает

Конструкция ^старое_слово^новое_слово^ — это удобное сокращение для манипуляций с историей. Важно учитывать два момента:

  • Она заменяет только первое вхождение искомой подстроки.
  • Если необходимо заменить все вхождения слова в команде, следует использовать синтаксис глобальной замены: !!:gs/старое/новое/.

Практические примеры

1. Исправление опечатки в пути к конфигурации:

Часто ошибки случаются при работе с путями сервисов, таких как Nginx:

cd /etc/ngnix/sites-available
^ngnix^nginx^

2. Быстрая смена флагов:

Если вы использовали базовую команду ls, но решили изменить формат вывода:

ls -la
^-la^-lh^

Бонус-лайфхак: Безопасная проверка (:p)

Если вы хотите произвести замену, но не готовы к немедленному выполнению команды, добавьте модификатор :p (print) в конце:

^old^new^:p

В этом случае исправленная команда просто отобразится на экране и попадет в историю. Вы сможете визуально проверить результат, а затем запустить её клавишей «вверх» и Enter.

Заключение

Этот прием одинаково эффективно работает как в Bash, так и в Zsh. Это один из тех маленьких системных трюков, которые делают администрирование Linux более продуктивным, избавляя от лишних действий при исправлении мелких опечаток в CLI.