2012-10-02 112 views
2

我有一个例子:AWK-如何改善这个正则表达式?

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

如何提高正则表达式得到的结果:

,article{gjn2010jucs 
+0

你应该有很多关于你的要求更具体的在这里。 –

+1

我需要什么附加信息?我在谈论这个特例。 – Tedee12345

+1

'awk -F,'{printf',%s \ n“,$ 2}''? – twalberg

回答

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 
+0

谢谢你提供一个好的解决方案。在gawk中工作,但它不适用于mawk。 – Tedee12345

+0

@ Tedee12345:你说的没错。 'mawk'不能完成某些函数,包括'gensub()'不幸的。 – Steve

1

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

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

mawk更新:

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

谢谢你提供一个好的解决方案。在gawk中工作,但它不适用于mawk。 – Tedee12345

+0

@ Tedee12345,已更新为mawk –

+0

再举一个例子。 – Tedee12345