Bash: reemplaza todas las apariciones de una palabra en el último comando

14

Casi por error, descubrí que podrías hacer algo como:

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

Y eso ejecuta el mismo comando con en bar2.datalugar de bar1.data. Ahora, ¿qué tal si tengo múltiples ocurrencias de la palabra objetivo? Por ejemplo:

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

Solo reemplaza la primera dataextensión. ¿Cómo consigo reemplazar ambos?

Belmin Fernandez
fuente

Respuestas:

22

Creo que ^data^indexes equivalente a !!:s/data/index, por lo que solo sustituirá la primera palabra. Si desea sustituir toda la línea, creo que tendrá que usar!!:gs/data/index/

steabert
fuente
Este reemplazo (: gs / data / index) es una función bash o está llamando implícitamente a otro programa?
JohnTortugo
7

Puede hacerlo agregando ^: & al final.
^: & reemplazará dos ocurrencias
^: g & reemplazará todos

$ 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 al margen: en el libro 'línea de comando kungfu'
dice que ^: & reemplazará todo

Nota89
fuente
1
En realidad, ^:&hará la sustitución dos veces . Para hacer todas las ocurrencias, use ^:g&( gsignifica "global").
G-Man dice 'Restablece a Monica' el
Tnx! Nunca lo probé por más de dos veces. Lee el comando en un libro.
Nota89