代码之家  ›  专栏  ›  技术社区  ›  philipp

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

  •  1
  • philipp  · 技术社区  · 6 年前

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

    $ history | grep ssh
    
    1234 ssh x@y.z
    1235 ssh y@z.a
    1236 ssh z@a.b
    …
    

    但我在寻找一种方法把所有的 命令后接 rsync 命令。结果应该是这样的:

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

    所以我基本上是想在后面的行中找到后面的词

    1 回复  |  直到 6 年前
        1
  •  2
  •   myradio    6 年前

    一种选择是使用:

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

    这不是最优的,因为它将匹配在同一行中运行rsync和ssh的情况。

    你可以做得更好:

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

    在这里,我像您一样使用history命令(因为另一种选择是使用history文件)。

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

    然后我 grep 开始的行( ^ )我和ssh要求打印那一行( -A 1 )

    然后我 格雷普 对于开始的行( ^ )我用rsync打印上一行( -B 1 )