text='123ABCabc((XYZabc((((((abc123(((123'echo $text | awk '{ print index(echo 'dksjfkdj(((((((I-WANT-THIS-SUBSTRING)askdjflsdjf' | mawk '{match(,"((((a" )}' # 20 is the result.$echo "$text" | awk '{ print match(,/\(\(\(\([^()]*\)/); s = substr(,RSTART,RLENGTH); gsub(/[()]/,"",s); print s}'echo 'dksjfkdj(((((((I-WANT-THIS-SUBSTRING)askdjflsdjf' | mawk '{match(,s); print s}',/\(\(\(\(([^(])/,arr); print arr[1,"start"]}'2024
但是,在我的应用程序中,我不知道在这个例子中“a”的字符是什么.因此,我认为我可以用接受“(”之外的任何字符的正则表达式替换“a”.我认为/ [^(} /将是我需要的.但是,我无法获得Awk索引命令使用任何形式的正则表达式代替“((((在示例中为”a“).
更新:William Pursell指出索引 *** 作不接受正则表达式作为第二个 *** 作数.
最终,我试图完成的是提取位于四个或更多“(”,后跟一个或多个“)”之后的子串. Dennis Williamson使用以下代码提供了解决方案:
感谢大家的帮助!
解决方法 要在一系列序列之后得到第一个非开括号的位置:这显示了子串“((([[^(]”(20))的位置以及括号(24)后面的字符的位置.
使用match()执行此 *** 作的能力是GNU(gawk)扩展.
编辑:
总结以上是内存溢出为你收集整理的如何使用awk的正则表达式提取括号之间的子串?全部内容,希望文章能够帮你解决如何使用awk的正则表达式提取括号之间的子串?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)