在Bash的所有比赛中^ ^词^replace^?

为了澄清,我正在寻找一种方法来执行全局search并replace上一个使用的命令。 ^word^replacement^似乎只能取代第一场比赛。

是否有一些set选项,让我难以置信?

尝试这个:

 $ echo oneone oneone $ !!:gs/one/two/ # Repeats last command; substitutes 'one' --> 'two'. twotwo 

把我的答案和John Feminella的混在一起,你可以做到这一点,如果你想要一个别名:

 $alias dothis='`history -p "!?monkey?:gs/jpg/png/"`' $ls *.jpg monkey.jpg $dothis monkey.png 

!! 只有前面的命令,而!?string? 匹配包含“string”的最近的命令。

此解决scheme使用Bash子串replace:

 $ SENTENCE="1 word, 2 words";echo "${SENTENCE//word/replacement}" 1 replacement, 2 replacements 

注意使用双斜线表示“全局”stringreplace。

这个解决scheme可以在一行中执行。

以下是如何全局replace名为“myfile.txt”的文件中的string:

 $ sed -i -e "s/word/replacement/g" myfile.txt 

一个讨厌的方法来解决这个问题可能是这样的:

想要通过交换L'A for A来回应BAABAA而不是BLABLA

 $ echo "BLABLA" BLABLA $ `echo "!!" | sed 's/L/A/g'` $(echo "echo "BLABLA" " | sed 's/L/A/g') BAABAA $ 

不幸的是,这种技术似乎不能在函数或别名中工作。

我在SUSE 10.1上testing它。 “^字^replace^”不起作用,而“^字^replace”起作用。 举个例子:

 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 #