^ parola ^ sostituzione ^ su tutte le partite in Bash?
Domanda
Per chiarire, sto cercando un modo per eseguire una ricerca globale e sostituire il comando precedente utilizzato. ^ word ^ sostituzione ^
sembra sostituire solo la prima corrispondenza.
C'è qualche opzione set
che mi sfugge?
Soluzione
Prova questo:
$ echo oneone
oneone
$ !!:gs/one/two/ # Repeats last command; substitutes 'one' --> 'two'.
twotwo
Altri suggerimenti
Miscelazione della mia risposta qui con John Feminella puoi farlo se vuoi un alias:
$alias dothis='`history -p "!?monkey?:gs/jpg/png/"`'
$ls *.jpg
monkey.jpg
$dothis
monkey.png
Il !! fa solo il comando precedente, mentre!? string? corrisponde al comando più recente contenente " string " ;.
Questa soluzione utilizza la sostituzione del sottostrato di Bash:
$ SENTENCE="1 word, 2 words";echo "${SENTENCE//word/replacement}"
1 replacement, 2 replacements
Nota l'uso delle doppie barre indica "globale" sostituzione della stringa.
Questa soluzione può essere eseguita in una riga.
Ecco come sostituire globalmente una stringa in un file chiamato " myfile.txt " ;:
$ sed -i -e "s/word/replacement/g" myfile.txt
Un modo brutto per aggirare questo potrebbe essere qualcosa del genere:
Vuoi echo BAABAA
anziché BLABLA
scambiando L's con A
$ echo "BLABLA"
BLABLA
$ `echo "!!" | sed 's/L/A/g'`
$(echo "echo "BLABLA" " | sed 's/L/A/g')
BAABAA
$
Sfortunatamente questa tecnica non sembra funzionare in funzioni o alias.
Lo collaudo su SUSE 10.1. & Quot; ^ parola ^ sostituzione ^ " non funziona, mentre " ^ parola ^ sostituzione " funziona bene. per esempio:
linux-geek:/home/Myworks # ls /etc/ld.so.conf
/etc/ld.so.conf
linux-geek:/home/Myworks # ^ls^cat
cat /etc/ld.so.conf
/usr/X11R6/lib/Xaw3d
/usr/X11R6/lib
/usr/i486-linux-libc5/lib=libc5
/usr/i386-suse-linux/lib
/usr/local/lib
/opt/kde3/lib
/opt/gnome/lib
include /etc/ld.so.conf.d/*.conf
linux-geek:/home/Myworks #