【问题标题】:Tail only the output of a command仅尾随命令的输出
【发布时间】:2021-06-16 02:57:14
【问题描述】:

我只是想运行gvm-setup 来配置OpenVAS。由于安装是 100% 无人值守的,并且不需要任何用户输入,我只是想将最后两行添加到文件中。

如果我运行以下命令:

gvm-setup | tee ~/.openvas_install.txt

然后它按预期将整个输出发送到文件。这个文件有 12MB 大,我只需要它的最后 2 行来捕获在配置过程结束时呈现给用户的密码。

我该怎么办?我意识到我可以简单地tail 12MB 的大文件作为替代方案,但我想知道是否有这样的东西可以工作:

gvm-setup | tail -n 2 output_file.txt

这是一个输出示例:

[*] Checking Default scanner
08b69003-5fc2-4037-a479-93b440211c73  OpenVAS  /var/run/ospd/ospd.sock  0  OpenVAS Default

[+] Done
[*] Please note the password for the admin user
[*] User created with password 'd6ae47e5-26d0-4a85-a0ce-99b9cb3fd09d'.

我只需要捕获随机生成的密码。

【问题讨论】:

  • 最后两行输出了什么示例信息(数据标签或其他一些数据,显然不需要密码)? ... 可能需要通过管道 ack 或 grep 获取。
  • 刚刚更新了整个帖子。实际上,这是一个非常棒的主意。非常感谢您的建议!
  • 那么可能是gvm-setup | ack 'User created with password' 之类的东西?或者grep 如果ack 不是首选。

标签: bash tail


【解决方案1】:

如果您需要日志文件和尾部输出,那么您应该使用 2 个单独的命令行

gvm-setup >~/.openvas_install.txt
tail -n 2 ~/.openvas_install.txt

因为当将文件传递给tail 时,它知道它可以获取文件大小并立即查找文件末尾。如果将输出通过管道传输到tail,那么它必须在接收管道结束之前实际消耗大量数据并打印出数据

当然tee 也有效,因为它将输出保存到文件和管道中的下一个命令,但效率会低得多

gvm-setup | tee ~/.openvas_install.txt | tail -n 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 2021-01-18
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多