BASH 历史记录操作:搜索替换

BASH 历史记录操作:搜索替换

BASH 中有一个非常方便的参数/变量扩展功能,但我在历史记录中没有看到。我查看了历史记录和 BASH 本身的手册页。没有……也许我错过了。

例如:我经常使用 ssh,我可以使用变量扩展来做到这一点。

[email protected]

假设我只想提取主机——而是删除用户名。

hostonly=${host##*@}

如果我

echo $hostonly

我得到:

bar.org

我的问题: 是否可以使用命令行历史记录来执行此操作?

例如。,

命令 1:

ssh [email protected]

命令2:

ssh gary@!!:##*@

当然,这是行不通的,但是有人可以确认这种类型的模式匹配是否可用吗?

谢谢!

布布诺夫

答案1

人们经常忽略的一个巧妙技巧是命令r(它本身是命令的一个特例fc):

$ ssh [email protected]
(...)
$ r foo=baz

更一般的情况是

$ fc -s foo=bar ssh

它允许您通过子字符串从历史记录中选择一个命令,然后执行指定的替换并运行它。如果您省略-s,它将加载命令$EDITOR以进行更复杂的修改;命令行编辑大多使此操作变得不必要,但有些编辑很难在命令行上完成。

您还可以使用!历史引用语法进行相当复杂的操作,但由于历史原因(基本历史机制是早期建立的csh,所有增强功能大多保持了兼容性),它使用不同的语法。请参阅这里了解详情。

答案2

$ ssh [email protected]
...
$ ^foo^gary^
...

使用“gary”而不是“foo”作为用户名重复该命令。下面的操作方式相同:

$ ssh [email protected]
...
$ !!:s/foo/gary/
...

相关内容