AWK-如何改进这个正则表达式?

时间:2012-10-02 18:10:11

标签: awk

我有一个例子:

pic@pic:~$ echo ",article{gjn2010jucs, Author =   {Grzegorz J. Nalepa}, " | awk '{gsub(/[^,],.*/,""); print }' 
,article{gjn2010juc 
pic@pic:~$ 

如何改进正则表达式以获得结果:

,article{gjn2010jucs

2 个答案:

答案 0 :(得分:1)

如果您希望改善正则表达式:您需要使用捕获组,而这些不是sub()gsub()中提供的功能。您需要使用gensub()。 您可以阅读有关字符串操作函数here的更多信息。

我会像这样使用gensub()

awk '{ print gensub(/(,[^,]+).*/,"\\1", "g") }'

测试:

echo ",article{gjn2010jucs, Author =   {Grzegorz J. Nalepa}, " | awk '{ print gensub(/(,[^,]+).*/,"\\1", "g") }'

结果:

,article{gjn2010jucs

答案 1 :(得分:1)

或者,不要找到丢弃的东西,而是找到要保留的东西:保留第一个逗号和所有后续的非逗号字符:

gawk 'match($0, /^,[^,]+/, ary) {print ary[0]}'

mawk update:

mawk 'match($0, /^,[^,]+/) {print substr($0, RSTART, RLENGTH)}'