gpt4 book ai didi

linux - 使用 sed 数据创建列(仅限 bash)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:29 26 4
gpt4 key购买 nike

我对 bash 文本编辑命令比较陌生,正在努力提高我的技能,所以请多多包涵!

我正在寻找一个简单的命令序列来定位我平台上的所有 SSL 证书,我理想的输出是三列路径、文件名和到期时间。

好的,到目前为止我有这样的东西:

sudo find / -type f \( \( -name "*.pem" -o -name "*.crt" \) ! -path "/unwanted/search/location/*" \) -exec sh -c 'echo {}; true' \; -exec openssl x509 -enddate -noout -in {} \; | sed s/notAfter=// | sed -r 's:/([a-Z0-9._-]*)$:\r\n\1:' | sed 's/GMT/&\n/'

这会产生一个可用的输出(我花了一些时间来实现功能)。这是一些示例输出:

/etc/pki/tls/certs
gogs.crt
Feb 8 23:59:59 2018 GMT

/etc/pki/tls/certs
sample.crt
Jan 18 23:59:59 2018 GMT

最后是提问时间 - 我应该利用什么工具将其重新格式化为以下内容:

/etc/pki/tls/certs  gogs.crt   Feb  8 23:59:59 2018 GMT
/etc/pki/tls/certs sample.crt Jan 18 23:59:59 2018 GMT

直列是理想的,但不是我最初的目标 - 现在我真的只是想了解如何提高我的流处理技能,肯定有一种方式可以说明:

Use output from last command, collapse the line breaks, replace with "tab", add linefeed, move onto next.

有没有人可以提供一些建议?迄今为止的尝试导致了一些噩梦般的输出——如果这不会增加困惑的话,我会添加一个例子!

感谢读者!

最佳答案

你可以在 -exec sh -c ' .... ' 中进行如下修改

-exec sh -c 'file="${0##*/}"; path="${0%/*}"; expiry=$(openssl x509 -enddate -noout -in "$0" | sed "s/notAfter=//");  echo "$path $file $expiry"' {} \;
  • file="${0##*/}"; - 获取文件名

  • path="${0%/*}"; - 获取路径

  • expiry=$(openssl x509 -enddate -noout -in "$0"| sed "s/notAfter=//"); - 获取有效期

  • echo "$path $file $expiry" - 在末尾打印所有变量

It will become :

sudo find / -type f \( \( -name "*.pem" -o -name "*.crt" \) ! -path "/unwanted/search/location/*" \) -exec sh -c 'file="${0##*/}"; path="${0%/*}"; expiry=$(openssl x509 -enddate -noout -in "$0" | sed "s/notAfter=//");  echo "$path $file $expiry"  ' {} \;

关于linux - 使用 sed 数据创建列(仅限 bash),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46054196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com