如何使用awk的正则表达式提取括号之间的子串?
发布时间:2020-12-13 23:06:09 所属栏目:Linux 来源:网络整理
导读:在下面的 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($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); print s}' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |