所以我有一个包含以下形式的行的文本文件:
#===== In WORD.BLAH.ETC.WORD.STRING(STUFF) =======
我想要STUFF
,我希望将其存储在变量中。
到目前为止,我可以使用awk '/STRING\(/ { print $0 }' $f
正确获取该行,但我不确定如何提取STUFF
。怎么做?我没有GNU AWK。
答案 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()。