gpt4 book ai didi

regex - 如何使用正则表达式和 Awk 提取括号之间的子字符串?

转载 作者:行者123 更新时间:2023-12-05 01:27:35 47 4
gpt4 key购买 nike

在下面的 Bash 命令行中,当子字符串位于双引号之间时,我可以获得子字符串的索引。

text='123ABCabc((XYZabc((((((abc123(((123'

echo $text | awk '{ print index($0, "((((a" )}' # 20 is the result.

但是,在我的应用程序中,我不知道本示例中“a”所在的位置是什么字符。因此,我认为我可以用接受除“(”以外的任何字符的正则表达式替换“a”。我认为/[^(}/将是我需要的。但是,我一直无法获得 Awk 索引命令使用任何形式的正则表达式代替“((((a)在示例中。

更新: William Pursell 指出索引操作不接受正则表达式作为第二个操作数。

最终,我试图完成的是提取位于四个或更多“(”,后跟一个或多个“)”之后的子字符串。 Dennis Williamson 提供了以下代码的解决方案:
echo 'dksjfkdj(((((((I-WANT-THIS-SUBSTRING)askdjflsdjf' | 
mawk '{match($0,/\(\(\(\([^()]*\)/); s = substr($0,RSTART, RLENGTH); gsub(/[()]/, "", s); print s}'

感谢大家的帮助!

最佳答案

要在它们的序列之后获得第一个非开括号的位置:

$ echo "$text" | awk '{ print match($0, /\(\(\(\(([^(])/, arr); print arr[1, "start"]}'
20
24

这显示了子字符串 "((([^(]"(20) 和括号后字符的位置 (24) 的位置)。

可以通过 match() 执行此操作是 GNU ( gawk ) 扩展。

编辑:
echo 'dksjfkdj(((((((I-WANT-THIS-SUBSTRING)askdjflsdjf' | 
mawk '{match($0,/\(\(\(\([^()]*\)/); s = substr($0,RSTART, RLENGTH); gsub(/[()]/, "", s); print s}'

关于regex - 如何使用正则表达式和 Awk 提取括号之间的子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10836798/

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