[英]awk -F command to print based on first matched pattern
如果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)
處理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.