^符号:bash中历史命令的替换 shell history substitution

shell中有种种好用的小tip,其中关于历史命令的主要是感叹号!

比如!!是执行上一条命令,!$是上一次命令中最后一个参数,!*是上一次命令中所有的参数等等。

不记得在哪儿看到过使用^来替换命令中字符的用法(bash支持,sh不支持,ksh,zsh等没研究)。例如:

[lyu@MaxIo-DO ~]$ ls ab
ls: cannot access ab: No such file or directory
[lyu@MaxIo-DO ~]$ ^ab^abc
ls abc
abc

^ab^abc 的作用就是将上一条命令中的ab替换成abc,当然ls ab的命令很简单,这么用不是很值得,但是当你的参数很长很多的时候,你重新敲或者翻到上一条命令再移动光标进行修改就很麻烦了,这时候^的作用就体现出来了。

可是今天,我在替换一个命令的时候发现了问题,简单说明如下:

[lyu@MaxIo-DO ~]$ ls ab ab
ls: cannot access ab: No such file or directory
ls: cannot access ab: No such file or directory
[lyu@MaxIo-DO ~]$ ^ab^abc
ls abc ab
ls: cannot access ab: No such file or directory
abc

可以看到,^只是替换了命令中的第一个匹配项,但是我需要的是全部替换,这可怎么办呢?!

一番Google以后,在StackOverFlow上找到了答案:

"man bash says ^old^new is equivalent to !!:s/old/new/. You want !!:gs/old/new/ to globally replace."

http://stackoverflow.com/questions/2280778/unix-commandline-history-substitution-foobar-for-multiple-replacements

好吧,虽然没有^方便了,但是还是很好用的,不过注意到回答中也提到了,bash丑陋的地方:g竟然放在命令的开头,还不是像sed vim等处理时放在最后。

好了~ 问题解决了,shell中还有很多小技巧等你来发现哦~!

转载于:https://my.oschina.net/maxio/blog/526709

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值