gpt4 book ai didi

regex - 了解 sed 示例

转载 作者:行者123 更新时间:2023-11-29 09:12:05 27 4
gpt4 key购买 nike

我找到了从 Mac OS X 钥匙串(keychain)项目中提取密码的解决方案。它使用 sedsecurity 命令获取密码:

security 2>&1 >/dev/null find-generic-password -ga $USER | \ 
sed -En '/^password: / s,^password: "(.*)"$,\1,p'

密码是here在'sr105'的评论中。 | 之前的部分计算为 password: "secret"。我试图弄清楚 sed 命令的确切工作原理。以下是一些想法:

我理解标志 -En,但是逗号在这个例子中有什么作用?在 sed 文档中它说逗号分隔地址范围,但有 3 个逗号。

第一个'address' /^password:/ 有一个尾随的s;在文档中 s 仅作为替换命令提及,如 s/pattern/replacement/。这里不是这种情况。

^password: "(.*)"$ 部分看起来像用于隔离 secret 的正则表达式,但它没有分隔。

我能理解打印出反向引用 \1 的结尾部分,但是,逗号在那里做什么?

请注意,我对这个 sed 示例的更简单替代方案不感兴趣。这只是一个更大的 bash 脚本的一部分,该脚本将在 .htaccess 文件中包含更多 sed 解析,所以我真的很想学习语法,即使它晦涩难懂。

感谢您的帮助!

最佳答案

这是 sed 命令:

sed -En '/^password: / s,^password: "(.*)"$,\1,p'
  • 逗号用作正则表达式分隔符,它很可能是另一个分隔符,如 #:

    sed -En '/^password: / s#^password: "(.*)"$#\1#p'`
  • /^password:/ 查找以 password:

  • 开头的输入行
  • s#^password: "(.*)"$#\1#p 查找并捕获 password: 之后的双引号字符串,并将整行替换为捕获的字符串 \1(所以剩下的就是密码)

关于regex - 了解 sed 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21465965/

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