为了澄清,我正在寻找一种方法来执行 全球的 搜索并替换以前使用的命令。 ^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

这 !!只执行前一个命令, while !?string?匹配包含“string”的最新命令。

此解决方案使用击子串的更换:

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

请注意使用双斜线表示的“全局”的字符串替换。

这个解决方案可以在一行中被执行。

下面是如何在全球范围内一个名为替换字符串“myfile.txt的”

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

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

想通过交换L的为A的回声BAABAA而非BLABLA

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

不幸的是这种技术似乎没有在功能或别名工作。

我测试它SUSE 10.1。 “^ ^一词替换^”不能正常工作,而“^ ^一词替换”效果很好。 为一个实例:

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 #   
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top