在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 #