如何使用awk的正则表达式提取括号之间的子串?

如何使用awk的正则表达式提取括号之间的子串?,第1张

概述在下面的 Bash命令行中,当子字符串在双引号之间时,我能够获得子字符串的索引. text='123ABCabc((XYZabc((((((abc123(((123'echo $text | awk '{ print index($0, "((((a" )}' # 20 is the result. 但是,在我的应用程序中,我不知道在这个例子中“a”的字符是什么.因此,我认为我可以用接受“( 在下面的 Bash命令行中,当子字符串在双引号之间时,我能够获得子字符串的索引.

text='123ABCabc((XYZabc((((((abc123(((123'echo $text | awk '{ print index(
echo 'dksjfkdj(((((((I-WANT-THIS-SUBSTRING)askdjflsdjf' | mawk '{match(
$echo "$text" | awk '{ print match(
echo 'dksjfkdj(((((((I-WANT-THIS-SUBSTRING)askdjflsdjf' |     mawk '{match(,s); print s}'
,/\(\(\(\(([^(])/,arr); print arr[1,"start"]}'2024
,/\(\(\(\([^()]*\)/); s = substr(,RSTART,RLENGTH); gsub(/[()]/,"",s); print s}'
,"((((a" )}' # 20 is the result.

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

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

最终,我试图完成的是提取位于四个或更多“(”,后跟一个或多个“)”之后的子串. Dennis Williamson使用以下代码提供了解决方案:

感谢大家的帮助!

解决方法 要在一系列序列之后得到第一个非开括号的位置:

这显示了子串“((([[^(]”(20))的位置以及括号(24)后面的字符的位置.

使用match()执行此 *** 作的能力是GNU(gawk)扩展.

编辑:

总结

以上是内存溢出为你收集整理的如何使用awk的正则表达式提取括号之间的子串?全部内容,希望文章能够帮你解决如何使用awk的正则表达式提取括号之间的子串?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/1018726.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    , &q", "pubDate":"2022-05-23", "upDate":"2022-05-23" }
    保存
    , &q', author : 'read', cat_name : '系统运维', time_y_m : '2022年05月', time_d : '23', site_motto : '内存溢出' }; {script}{script}