我有一个例子:
pic@pic:~$ echo ",article{gjn2010jucs, Author = {Grzegorz J. Nalepa}, " | awk '{gsub(/[^,],.*/,""); print }'
,article{gjn2010juc
pic@pic:~$
如何改进正则表达式以获得结果:
,article{gjn2010jucs
我有一个例子:
pic@pic:~$ echo ",article{gjn2010jucs, Author = {Grzegorz J. Nalepa}, " | awk '{gsub(/[^,],.*/,""); print }'
,article{gjn2010juc
pic@pic:~$
如何改进正则表达式以获得结果:
,article{gjn2010jucs
sub()
如果您希望改进正则表达式:您将需要使用捕获组,而这些在or中不可用gsub()
。您将需要使用gensub()
. 您可以在此处阅读有关字符串操作函数的更多信息。
我会这样使用gensub()
:
awk '{ print gensub(/(,[^,]+).*/,"\\1", "g") }'
测试:
echo ",article{gjn2010jucs, Author = {Grzegorz J. Nalepa}, " | awk '{ print gensub(/(,[^,]+).*/,"\\1", "g") }'
结果:
,article{gjn2010jucs
或者,与其寻找要丢弃的东西,不如寻找要保留的东西:保留第一个逗号和所有后续的非逗号字符:
gawk 'match($0, /^,[^,]+/, ary) {print ary[0]}'
毛克更新:
mawk 'match($0, /^,[^,]+/) {print substr($0, RSTART, RLENGTH)}'