【问题标题】:SH grep output only certain stringSH grep 仅输出某些字符串
【发布时间】:2020-01-10 15:36:28
【问题描述】:

我试图从 grep 中获取我输出的一部分。目前,我得到的全文可能如下所示:“位置:/path/to/file”或“状态:错误”。但是我只想打印第二部分,即“/path/to/file”和“Error”。观察到一个输出包含“Elapsed time: 568 hours (23.6 days)”,我需要删除hours (23.6 days) 部分。这些都是不同的 grep,每个都可以使用唯一的代码。

所以我期望的结果是提供输入:

Elapsed time:    568 hours (23.6 days)

输出应该是568

对于我期望的另一个示例,结果是提供输入:

State:    Error

输出应该是Error

我试图检查一个叫做 awk 和 sed 的东西,有点困惑,不太清楚如何在我的问题上实现它。

`grep "Elapsed Time: *" | sed -e 's/Elapsed Time://g'` 

这将打印出 568 小时(23.6 天)。

 grep "Location: *" | sed -e 's/Location://g' 

有效,但在 Location: 和 /path/to/file 之间包含大量空白空间,是否也可以一次性删除这些空间?

【问题讨论】:

标签: grep sh


【解决方案1】:

如果行包含Elapsed time: 打印第三列:

echo 'Elapsed time:    568 hours (23.6 days)' | awk '/Elapsed time:/{print $3}'

或使用 GNU grep 和 Perl 兼容的正则表达式 (PCRE)

echo 'Elapsed time:    568 hours (23.6 days)' | grep -Po 'Elapsed time: *\K.*(?= hours)'

或使用 GNU sed 和扩展正则表达式:

echo 'Elapsed time:    568 hours (23.6 days)' | sed -r 's/Elapsed time: *(.*) hours.*/\1/'

输出:

568

【讨论】:

    猜你喜欢
    • 2021-02-09
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    相关资源
    最近更新 更多