«^old^new^» — магия быстрой замены строк в Bash
Представьте ситуацию: вы ввели длинную и сложную команду, нажали 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.