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?

È stato utile?

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 #   
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top