Есть много способов снять шкуру с этой кошки!
Чтобы заменить определенную строку, ^old^new^extra примет вашу предыдущую команду, заменит old на new и добавит extra . Вы можете остановиться как угодно раньше; Например, ^old заменит old пустой строкой и добавит пустую строку (по сути, удаляя old и больше ничего не делая).
1. ^diff^checkout
2. ^cat^rm
Особенно полезный вариант этого:
for i in `seq 1 10`; do echo something complicated; done
# inspect the output to see if it looks right
^echo
Чтобы заменить конкретное слово, вы можете использовать !m:n-p для ссылки на слова n p команды m (используйте отрицательные числа для обратного отсчета от текущей команды). Вы можете опустить часть -p для ссылки на одно слово и опустить часть :m-p для ссылки на всю команду. Специальные формы !! за !-1 !$ за последнее слово предыдущей команды и !* аргументы (все, кроме слова 0) предыдущей команды довольно удобны.
1. !!:0 checkout !!:2-
2. rm !*
Я часто использую оба из них; zsh особенно хорош здесь, так как нажатие на вкладку раскроет загадочные вещи, чтобы убедиться, что вы правильно поняли.
Есть также так много способов сделать это с редактированием строки. Читайте о сочетаниях клавиш вашей оболочки.