【问题标题】:How to grep search for string but omit string from result [duplicate]如何grep搜索字符串但从结果中省略字符串[重复]
【发布时间】:2018-09-13 18:58:53
【问题描述】:

我正在尝试使用以下命令查找 SSL 证书的到期日期:

openssl s_client -connect ${CERT}:443 </dev/null 2>&1 | openssl x509 -text | grep "Not After"

这会以以下格式将结果输出到终端:

Not After : Apr 14 10:06:09 2018 GMT

如何删除结果中的“Not After :”部分并仅显示:

Apr 14 10:06:09 2018 GMT

任何帮助表示赞赏!

【问题讨论】:

    标签: linux string bash search grep


    【解决方案1】:

    只需使用lookbehind来摆脱它:

    $ grep -Po '(?<=Not After : ).*' <<< "Not After : Apr 14 10:06:09 2018 GMT"
    Apr 14 10:06:09 2018 GMT
    

    使用(?&lt;=Not After : ).*,我们告诉grep 打印固定字符串“Not After :”之后的所有内容。

    请注意,这需要带有 -P 选项的 grep 来加载 Perl 正则表达式。

    【讨论】:

    • 感谢您的帮助,但 -P 标志对我不起作用。现已修复
    【解决方案2】:

    一个简单的方法:-

       openssl s_client -connect ${CERT}:443 </dev/null 2>&1 | openssl x509 -text | grep "Not After" | sed 's/Not After : //g'
    

    这里我添加了| sed 's/Not After : //g'。现在这里sed 命令将搜索字符串Not After : 并将其从重定向到它的原始字符串中替换。最终输出将是:-

    Apr 14 10:06:09 2018 GMT
    

    希望这会对你有所帮助。

    【讨论】:

    • 为什么是/g?如果只想替换一次,则不需要使用全局标志。
    • @Abhijit Pritam 谢谢,这行得通!
    • 为什么grep、sed就足够了?
    猜你喜欢
    • 2019-04-16
    • 1970-01-01
    • 2014-04-27
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    相关资源
    最近更新 更多