在历史记录中查找后续命令

时间:2018-06-15 11:55:16

标签: bash

要获取我可以输入的所有先前ssh命令的列表:

$ history | grep ssh

1234 ssh x@y.z
1235 ssh y@z.a
1236 ssh z@a.b
…

但是我正在寻找一种方法来获取所有ssh命令的列表,然后是rsync命令。所以结果应该是这样的:

1234 ssh x@y.z
1235 rsync y@z.de …
…
4321 ssh y@z.a
4322 rsync z@a.b …

所以我基本上试图在后续行中找到后续的词......

1 个答案:

答案 0 :(得分:2)

一种选择是使用:

history | grep -A 1 ssh | grep -B 1 rsync

这是非最佳的,因为它会匹配你在同一行中运行rsync和ssh的情况。

你可以尝试更好:

history | cut -c 8- | grep -A 1 ^ssh | grep -B 1 ^rsync

这里我正在使用历史命令(因为另一种选择是使用历史文件)。

然后我用cut删除行号。 (这可能不是很优雅,因为考虑到历史输出中的行号列总是有8个字符,您可能必须检查8是否是正确的数字(对于我可以检查的版本,它是:) ))。

然后我使用ssh开始(grep)的^行,我要求在(-A 1)之后打印该行和一行

然后我grep表示使用rsync启动(^)的行,我打印前一行(-B 1