Bash:替换最后一个命令中出现的所有单词

Bel*_*dez 15 linux bash command-line

几乎是错误的,我发现您可以执行以下操作:

$ cp foo.data bar1.data
$ ^bar1^bar2
Run Code Online (Sandbox Code Playgroud)

并且使用bar2.data而不是运行相同的命令bar1.data。现在,如果我多次出现目标词呢?例如:

$ cp foo.data bar.data
$ ^data^index
Run Code Online (Sandbox Code Playgroud)

它只替换第一个data扩展名。我如何让它替换两者?

小智 22

我认为^data^index相当于!!:s/data/index,所以它只会替换第一个单词。如果你想替换整行,我想你必须使用!!:gs/data/index/


小智 8

您可以通过在末尾添加 ^:& 来实现。
^:& 将替换两次
^: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

旁注:在“命令行功夫”一书中,
它说 ^:& 将替换所有