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.