在以下 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}'
感谢大家的帮助!