Подстановка истории командной строки Unix ^ foo ^ bar (для множественных замен) - PullRequest
23 голосов
/ 17 февраля 2010

Иногда я использую команду bash для замены строки в предыдущей команде:

^foo^bar

Сегодня я хотел сделать замену в следующей строке для замены всех вхождений checkbox на `radio:

$ git mv _product_checkbox_buttons.html.erb _product_checkbox_button.html.erb
$ ^checkbox^radio
git mv _product_radio_buttons.html.erb _product_checkbox_button.html.erb

Так что он заменяет только первое вхождение. Как мне сделать так, чтобы он заменял все вхождения?

bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
Copyright (C) 2007 Free Software Foundation, Inc.

Ответы [ 2 ]

32 голосов
/ 17 февраля 2010

man bash говорит, что ^old^new эквивалентно !!:s/old/new/. Вы хотите !!:gs/old/new/ глобально заменить.

14 голосов
/ 18 февраля 2010

Простой способ сделать это:

fc -s checkbox=radio

У меня есть псевдоним r, определенный в моем .bashrc:

alias r='fc -s'

Тогда, что вы хотите сделатьстановится:

r checkbox=radio

Подробнее см. мой ответ на вопрос " скрытые возможности bash ".

...