gpt4 book ai didi

regex - Bash 脚本 grep 用于文本变量中的模式

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

我有一个包含文本的变量;我可以将它回显到标准输出,所以我认为变量没问题。我的问题是试图在该文本变量中寻找模式。这是我正在尝试的:

ERR_COUNT=`echo $VAR_WITH_TEXT | grep "ERROR total: (\d+)"`

当我回显 $ERR_COUNT 时,变量似乎是空的,所以我一定是做错了什么。

如何正确地做到这一点?谢谢。

编辑 - 只是想提一下,在变量中的示例文本上测试该模式确实给了我一些东西(我测试了:http://rubular.com)

但是正则表达式仍然可能是错误的。

EDIT2 - 还没有得到任何结果,所以这是我正在使用的字符串:

ALERT line125:警报:在 qwer.xml 层次结构中找不到“asdf”的任何描述。 (由于 (?i-xsm:\balert?\b) ALERT in ../hgfd.controls) ALERT line126: Alert: Cannot locate any description for 'zxcv' in the qwer.xml hierarchy. (由于 (?i-xsm:\balert?\b) ALERT in ../dfhg.controls)ALERT line127:警报:在 qwer.xml 层次结构中找不到“rtyu”的任何描述。 (由于(?i-xsm:\balert?\b)../kjgh.controls 中的警报)[1] 22280 忽略总数:0 警告总数:0 警报总数:3 错误总数:23 [1] + 完成/工具/pandora/bin/gvim -u 无 -U 无 -nRN -c 运行时!插件/**/*.vim -bg ...

这就是字符串,所以希望不会再出现歧义...我想将数字“23”(在“ERROR total:”之后)提取到一个变量中,但我遇到了困难哈哈。

干杯

最佳答案

您可以使用 bash 的 =~ 运算符来提取值。

[[ $VAR_WITH_TEXT =~ ERROR\ total:\ ([0-9]+) ]]

注意你必须转义空格,或者只引用正则表达式的固定部分:

[[ $VAR_WITH_TEXT =~ "ERROR total: "([0-9]+) ]]

因为引用任何元字符都会导致它们被处理字面意思。

您还可以将正则表达式保存在变量中:

regex="ERROR total: ([0-9]+)"
[[ $VAR_WITH_TEXT =~ $regex ]]

无论如何,一旦表达式匹配,括号中的表达式可以在 BASH_REMATCH 数组中找到。

ERR_COUNT=${BASH_REMATCH[1]}

(第零个元素包含整个匹配的正则表达式;带括号的子表达式按照它们在完整正则表达式中出现的顺序在其余元素中找到。)


如果你想使用 grep,你需要一个可以接受 Perl 风格正则表达式的版本。

ERR_COUNT=$( echo "$VAR_WITH_TEXT" | grep -Po "(?<=ERROR total: )\d+" )

只要您需要使用 Perl 风格的正则表达式来启用后视断言,就可以将 [0-9] 替换为 \d

关于regex - Bash 脚本 grep 用于文本变量中的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11836720/

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