2014-03-13 86 views
0

如果2个字符串立即匹配,我正在使用awk -F命令打印下一组字。awk -F命令根据第一个匹配的模式打印

如果其中一个搜索关键字在变量中重复,那么它将取最后一个匹配的关键字模式。但我想要第一个匹配的模式。

编辑:在下面的例子,我需要搜索其可以呈现在任何线路或通过任何单词分割CREATETABLE关键字。无论是关键字CREATE & TABLE的匹配,无论是如何打印下面的元素。

a="Hello I have a CREATE set or multiset TABLE as TABLE (uid, cid, mid)" 
echo "$a" | awk -F"CREATE.*TABLE" '{print $2}' 
returns: as (uid, cid,mid) 

但预计产量

如表(UID,CID,MID)

+0

如果在-F添加什么“TABLE”后的空间? 'awk -F“CREATE。* TABLE”'这样,它就不会与第二个匹配'('。 – fedorqui

+0

@fedorqui:我编辑了我的问题。空间可能会来第二个也是 – logan

+0

然后你可以使用' -F“CREATE [az] * TABLE”'。 – fedorqui

回答

2

大多数工具在处理正则表达式查找最左边的最长的匹配字符串。你的情况:

a="Hello I have a CREATE set TABLE as TABLE (uid, cid, mid)" 
echo "$a" | awk -F"CREATE.*TABLE" '{print $2}' 

,因为你有这个词表两次输入线,从你的正则表达式该表将因此结果是可能的最长匹配匹配第二。 awk没有办法改变正则表达式匹配的行为,其他工具可能有选择让你问最短的时间而不是最长的匹配,但awk不会。

你可能已经打算代替写的是:

echo "$a" | awk -F'CREATE +[^ ]+ +TABLE' '{print $2}' 
as TABLE (uid, cid, mid) 
+0

是的。为什么downvote? –

+1

你低估了答案,因为你找不到gawk?使用另一个awk。好悲伤。 –

+0

我在$ a变量中有多行。它现在不返回任何东西 – logan