Bash: sostituisce tutte le occorrenze di una parola nell'ultimo comando


14

Quasi per errore, ho capito che potresti fare qualcosa del tipo:

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

E questo esegue lo stesso comando con bar2.datainvece di bar1.data. Ora, che ne dici se ho più ricorrenze della parola target? Per esempio:

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

Sostituisce solo la prima dataestensione. Come ottengo per sostituire entrambi?

Risposte:


22

Penso che ^data^indexsia equivalente a !!:s/data/index, quindi sostituirà solo la prima parola. Se vuoi sostituire l'intera riga, penso che dovrai usarla!!:gs/data/index/


Questa sostituzione (: gs / data / index) è una funzione bash o sta implicitamente chiamando un altro programma?
John Tortugo,


7

Puoi farlo aggiungendo ^: & alla fine.
^: & sostituirà due occorrenze
^: g & sostituirà tutto

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

sidenote: nel libro 'command line kungfu'
dice che ^: & sostituirà tutto


1
In realtà, ^:&farà la sostituzione due volte . Per eseguire tutte le occorrenze, utilizzare ^:g&( gsta per "globale").
G-Man dice "Ripristina Monica" il

Grazie! Non l'ho mai provato per più di due occorrenze. Leggi il comando in un libro.
Nota89
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.