^x^y
,它将接受最后一个命令并将“ x”的第一个实例替换为“ y”。但是,我想知道在上一个命令中是否有类似的技巧可以将“ x”的所有实例替换为“ y”?#1 楼
您可以使用!!:gs/search/replace/
表示法执行所需的操作。这利用了全局搜索和替换(:gs
):之前
$ echo "harm warm swarm barm"
harm warm swarm barm
之后
$ !!:gs/arm/orn/
echo "horn worn sworn born"
horn worn sworn born
参考文献
Bash命令行历史记录权威指南
在Bash shell中进行Caret搜索和替换
评论
@slm这个命令只是为我替换了第一个实例。 [subhrcho @ slc04lyo pcbpel] $回声“蝙蝠的帽子” [bathrcho @ slc04lyo pcbpel] $ !!:gs / at / xx /回声“蝙蝠的hxx”蝙蝠的hxx。我想念什么?
–极客
2014-02-24 6:35
@Geek-您的发行版是什么?您正在使用Bash吗?版? bash --version = 4.2.45(1)-发布
–slm♦
14年2月24日在6:39
@slm GNU bash,版本3.2.25(1)-发行版(x86_64-redhat-linux-gnu)版权所有(C)2005自由软件基金会,公司。
–极客
14年2月24日在6:40
@Geek-版本太旧,不提供此功能。
–slm♦
2014-2-24在6:41
#2 楼
我不相信有一种简单的方法可以向^string1^string2
添加内容以使bash
替换每次出现的情况。正如slm所指出的,您必须编写!!:gs/string1/string1
。但是在
zsh
中,您只需添加:G
:$ echo foo foo
foo foo
$ ^foo^bar^:G
echo bar bar
bar bar
在
bash
和zsh
,也可以像这样使用fc -s
:$ echo foo foo
foo foo
$ fc -s foo=bar
echo bar bar
bar bar
这通常被称为
r
的别名,因此您可以这样做:$ echo foo foo
foo foo
$ r foo=bar
echo bar bar
bar bar
评论
哇真的也很整洁
–梅森
2014年2月24日,下午3:54
#3 楼
我相信最好的选择是使用“:&”$ echo "dog cat dog"
$ ^dog^cat^:&
echo "cat cat cat"
cat cat cat
,但是就像下面的StéphaneChazelas所评论的那样,这仅替换了2次出现。如果还有更多,则需要添加更多:&
评论
这将替换2个事件,而不是全部(在此示例中全部替换,因为只有2个事件,但在一般情况下不是)。您需要添加尽可能多的:&,因为要替换的事更多。
–StéphaneChazelas
19年4月30日在17:14
评论
该功能称为历史记录扩展。看起来我们为此使用了command-history标签。添加。另外,我假设您指的是bash shell?