Bash: замініть усі входження слова в останній команді


14

Майже помилково я зрозумів, що ти можеш зробити щось на кшталт:

$ cp foo.data bar1.data
$ ^bar1^bar2

І це запускає ту саму команду, що не bar2.dataзамість bar1.data. Тепер, а як бути, якщо у мене кілька разів зустрічається цільове слово? Наприклад:

$ cp foo.data bar.data
$ ^data^index

Він замінює лише перше dataрозширення. Як змусити його замінити обидва?

Відповіді:


22

Я думаю, що ^data^indexце рівнозначно !!:s/data/index, тому воно замінить лише перше слово. Якщо ви хочете, щоб вся лінія була заміщеною, я думаю, вам доведеться скористатися!!:gs/data/index/


Ця заміна (: gs / data / index) є базовою функцією чи неявно викликає іншу програму?
ДжонТортуго


7

Це можна зробити, додавши ^: & до кінця.
^: & замінить два входження
^: g & замінить усі

$ cp foo.data bar.data
$ ^ дані ^ індекс ^: &
$ cp foo.index bar.index
$ cp foo.data bar.data joe.data doe.data
$ ^ дані ^ індекс ^: g &
$ cp foo.index bar.index joe.index doe.index

sidenote: у книзі "командний рядок kungfu"
написано, що ^: & замінить усіх


1
Насправді, ^:&заміни зробимо двічі . Щоб виконати всі події, використовуйте ^:g&( gрозшифровується як "глобальний").
G-Man каже: "Відновіть Моніку"

Tnx! Я ніколи не тестував його на більш ніж два випадки. Прочитайте команду в книзі.
Примітка89
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.