Bash: remplace toutes les occurrences d'un mot dans la dernière commande


14

Presque par erreur, j'ai pensé que vous pourriez faire quelque chose comme:

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

Et cela exécute la même commande avec bar2.dataau lieu de bar1.data. Maintenant, qu'en est-il si j'ai plusieurs occurrences du mot cible? Par exemple:

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

Il ne remplace que la première dataextension. Comment l'obtenir pour remplacer les deux?

Réponses:


22

Je pense que ^data^indexc'est équivalent à !!:s/data/index, donc il ne remplacera que le premier mot. Si vous voulez remplacer la ligne entière, je pense que vous devrez utiliser!!:gs/data/index/


Ce remplacement (: gs / data / index) est une fonctionnalité bash ou appelle-t-il implicitement un autre programme?
JohnTortugo


7

Vous pouvez le faire en ajoutant ^: & à la fin.
^: & remplacera deux occurrences
^: g & remplacera toutes

$ 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

sidenote: dans le livre 'kungfu en ligne de commande'
il est écrit que ^: & remplacera tous


1
En fait, ^:&fera la substitution deux fois . Pour faire toutes les occurrences, utilisez ^:g&( gsignifie "global").
G-Man dit `` Réintègre Monica '' le

Tnx! Je ne l'ai jamais testé pendant plus de deux occurrences. Lisez la commande dans un livre.
Note89
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.