2

我有一个例子:

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

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

,article{gjn2010jucs
4

2 回答 2

1

sub()如果您希望改进正则表达式:您将需要使用捕获组,而这些在or中不可用gsub()。您将需要使用gensub(). 您可以在此处阅读有关字符串操作函数的更多信息。

我会这样使用gensub()

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

测试:

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

结果:

,article{gjn2010jucs
于 2012-10-02T23:24:38.230 回答
1

或者,与其寻找要丢弃的东西,不如寻找要保留的东西:保留第一个逗号和所有后续的非逗号字符:

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

毛克更新:

mawk 'match($0, /^,[^,]+/) {print substr($0, RSTART, RLENGTH)}'
于 2012-10-03T00:27:59.680 回答