Как быстро изменить первое слово в команде Bash?

Как быстро изменить первое слово в команде Bash?

Я хотел бы немного улучшить свой рабочий процесс с помощью Bash и понимаю, что мне часто приходится выполнять одну и ту же команду в другом исполняемом файле.

Некоторые примеры:

Git (где я хотел бы быстро изменить второе слово):

git diff     foo/bar.c
git checkout foo/bar.c

Cat/rm (где нужно изменить только первое слово):

cat foo/is/a/very/long/path/to/bar.c
rm  foo/is/a/very/long/path/to/bar.c

Я знаю, что можно нажать Ctrl«+ a», Delчтобы удалить первое слово, но мне интересно, есть ли более быстрый способ сделать это.

решение1

!$расширяется до последнего слова вашей предыдущей команды.

Итак, вы можете сделать:

cat foo/is/a/very/long/path/to/bar.c

rm !$

или:

git diff foo/bar.c

git checkout !$

Ваши примеры случайно повторили только последнее слово, поэтому !$сработали нормально. Если у вас на самом деле было много аргументов, которые вы хотели повторить, и вы просто хотели изменить первое слово, вы могли бы использовать !*, который расширяется до всех слов предыдущей команды, кроме нулевого.

См. раздел "ИСТОРИЯ РАСШИРЕНИЯ" на bashстранице руководства. Там много гибкости.

решение2

Ctrl+ aдля перехода в начало строки, затем Alt+ dдля удаления первого слова.

решение3

Я не уверен, будет ли это на самом деле быстрее или нет, но посмотритеЭта статья,в частности пункт №3:

  1. Заменить строку из предыдущей команды, используя ^str1^str2^

В следующем примере мы сначала выполнили команду ls для проверки файла. Позже мы поняли, что хотим просмотреть содержимое файла. Вместо того, чтобы снова вводить все имя файла, мы можем просто заменить «ls» в предыдущей команде на «cat», как показано ниже.

$ ls /etc/cron.daily/logrotate

$ ^ls^cat^
cat /etc/cron.daily/logrotate

решение4

В дополнение к ответу @jjlin, вас могут заинтересовать следующие советы:

  • Ctrl+ wудаляет слово слева от вас
  • Ctrl+ kудаляет от курсора до конца командной строки
  • Ctrl+ uудаляет от курсора до начала командной строки
  • Alt+ bперемещает курсор на одно слово назад
  • Alt+ fперемещает курсор на одно слово вперед
  • $_содержит последний аргумент предыдущей командной строки

Более подробную информацию об этом можно найти в разделе «Имена команд Readline» на странице bashруководства.

например:

cat foo/is/a/very/long/path/to/bar.c
rm $_

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