使用awk查找一行(使用正则表达式)然后在parantheses之间提取单词

时间:2015-07-27 23:12:56

标签: regex awk sh

所以我有一个包含以下形式的行的文本文件:

#===== In WORD.BLAH.ETC.WORD.STRING(STUFF) =======

我想要STUFF,我希望将其存储在变量中。

到目前为止,我可以使用awk '/STRING\(/ { print $0 }' $f正确获取该行,但我不确定如何提取STUFF。怎么做?我没有GNU AWK。

2 个答案:

答案 0 :(得分:2)

要求救援

awk '/STRING/{match($0, "\\\((.*)\\\)", a); print a[1];}'

awk '/STRING/{match($0, /\((.*)\)/, a); print a[1];}'

答案 1 :(得分:1)

执行此操作的有效方法是:

$ awk 'match($0,/STRING\(([^)]*)\)/,a) { print a[1] }' file
STUFF

即使在输入行之前或之后还有其他的parens,它总是只打印STRING之后的parens之间的内容,例如:

$ cat file
abc(def) STRING(STUFF) ghi(klm)

$ awk '/STRING/{match($0, /\((.*)\)/, a); print a[1];}' file
def) STRING(STUFF) ghi(klm

$ awk 'match($0, /STRING\((.*)\)/, a) {print a[1]}' file
STUFF) ghi(klm

$ awk -F'[.()]' '$2 == "STRING" {print $3}' file
$

$ awk 'match($0,/STRING\(([^)]*)\)/,a) { print a[1] }' file
STUFF

以上使用GNU awk为第3个arg匹配(),其他awks使用match()+ substr()。