Bash: Substitua todas as ocorrências de uma palavra no último comando

14

Quase por engano, eu descobri que você poderia fazer algo como:

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

E isso executa o mesmo comando com em bar2.datavez de bar1.data. Agora, e se eu tiver várias ocorrências da palavra de destino? Por exemplo:

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

Ele substitui apenas a primeira dataextensão. Como faço para substituir ambos?

Belmin Fernandez
fonte

Respostas:

22

Eu acho que ^data^indexé equivalente a !!:s/data/index, então substituirá apenas a primeira palavra. Se você quiser que toda a linha seja substituída, acho que você terá que usar!!:gs/data/index/

Steabert
fonte
Essa substituição (: gs / data / index) é um recurso do bash ou está chamando implicitamente outro programa?
JohnTortugo
7

Você pode fazer isso adicionando ^: & ao final.
^: & substituirá duas ocorrências
^: g & substituirá todas

$ cp foo.data bar.data
$ ^ data ^ index ^: &
$ cp foo.index bar.index
$ cp foo.data bar.data joe.data doe.data
$ ^ data ^ index ^: g &
$ cp foo.index bar.index joe.index doe.index

Nota: no livro 'command line kungfu'
, diz que ^: & substituirá todos

Nota89
fonte
1
Na verdade, ^:&fará a substituição duas vezes . Para fazer todas as ocorrências, use ^:g&( gsignifica "global").
G-Man diz 'Reinstate Monica'
Tnx! Eu nunca testei por mais de duas ocorrências. Leia o comando em um livro.
Note89