如果2个字符串立即匹配,我正在使用awk -F
命令打印下一组单词。
如果在变量中重复搜索关键字之一,则它采用最后匹配的密钥模式。但我想要第一个匹配的模式。
编辑:在下面的示例中,我需要搜索CREATE
和TABLE
关键字,这些关键字可能出现在任意一行或由任何单词拆分。如果匹配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 :(得分:2)
处理regexp时的大多数工具都会查找最左边最长的匹配字符串。在你的情况下:
a="Hello I have a CREATE set TABLE as TABLE (uid, cid, mid)"
echo "$a" | awk -F"CREATE.*TABLE" '{print $2}'
因为在输入行上有两次单词TABLE,所以regexp中的TABLE将与第二个匹配,因此结果是最长的匹配。在awk中没有办法改变正则表达式匹配的行为,其他工具可能有选项让你要求最短而不是最长的匹配,但awk没有。
你可能要编写的内容是:
echo "$a" | awk -F'CREATE +[^ ]+ +TABLE' '{print $2}'
as TABLE (uid, cid, mid)