gpt4 book ai didi

bash - 在 grep 中使用带有特殊字符的变量

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

我想做的是使用我通过 CI 过程获得的证书名称作为 egrep 搜索子句来查找该证书的代码签名身份。执行搜索的代码如下所示:

SIGN_IDENTITY="iPhone Distribution: My Great Company, INC. (Alphanumeric_Here)"
CODE_SIGN_IDENTITY=`security find-identity -v -p codesigning | egrep "\d\d?\)\s[a-zA-Z0-9]{40}\s\"${SIGN_IDENTITY}\""`

security find-identity -v -p codesigning 返回值如下:

1) code_signing_id_40_alphanumeric "iPhone Distribution: My Company (alphanumeric)"
2) code_signing_id_40_alphanumeric "iPhone Developer: My Company (alphanumeric)"

如图所示,SIGN_IDENTITY 可以包含 ). 等字符,它们是正则表达式中的特殊字符,需要用 替换\)(或在本例中为 \\))。我进行了一些搜索,看看是否有其他人遇到过类似的问题,以及是否存在可以完成这项工作的功能,但找不到任何东西。

我也是 Bash 的新手。寻找现有函数或将 SIGN_IDENTITY 正则表达式相关字符替换为字符串文字的方法。

一种推荐并可以使用的方法如下:

CODE_SIGN_IDENTITY=`security find-identity -v -p codesigning | grep -F "${SIGN_IDENTITY}"`

但我很想知道是否有办法从 SIGN_IDENTITY 中转义特殊字符并将其用作正则表达式模式的一部分。

最佳答案

# a shell function using sed to escape POSIX BRE (Basic Regular Expressions)
bre_escape() { sed 's/[.[\*^$]/\\&/g'; }

# ...and an example of its use:
sign_identity="iPhone Distribution: My Great Company, INC. (Alphanumeric_Here)"
sign_identity_re=$(bre_escape <<<"$sign_identity")
code_sign_identity=$(security find-identity -p codesigning | grep -e "$sign_identity_re")

请注意,bre_escape 对 BRE 有效——普通 grep,而不是 egrepgrep -Egrep -P

关于bash - 在 grep 中使用带有特殊字符的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41474178/

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