Bash:替换上一条命令中出现的单词的所有位置

Bash:替换上一条命令中出现的单词的所有位置

几乎是偶然地,我发现你可以做类似的事情:

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

这会用bar2.data而不是 来运行相同的命令bar1.data。现在,如果我有多个目标单词出现怎么办?例如:

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

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

答案1

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

答案2

您可以通过在末尾添加 ^:& 来实现。
^:& 将替换两次出现的情况
^:g& 将替换所有出现的情况

$ cp foo.data bar.数据
$ ^数据^索引^:&
$ cp foo.index bar.index
$ cp foo.数据 bar.数据 joe.数据 doe.数据
$ ^数据^索引^:g&
$ cp foo.index bar.index joe.index doe.index

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

相关内容