簡體   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