繁体   English   中英

awk -F命令基于第一个匹配的模式打印

[英]awk -F command to print based on first matched pattern

如果2个字符串立即匹配,我使用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)

处理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中没有办法改变regexp匹配的行为,其他工具可能有选项让你要求最短而不是最长的匹配,但awk没有。

你可能有意写的是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM