2013-03-12 183 views
0

假設我有一個文件名foo.txt,它包含以下信息。匹配模式並打印後匹配一個字的grep

Notification are enabled 
Notification:445 
Mode: valid 
Bookmark are enabled 
Bookmarks:556 
Mode: Invalid 
Question are enabled 
Question:667 
Mode: Unknown 

我想grep/awk/sed下面的信息。 我需要一個像

    "Notification is Valid" 
        "Bookmark is Invalid" 
        "Question is Unknown" 

的結果。如果你有什麼事請讓我知道。謝謝。

+0

你能告訴我們你嘗試過什麼到目前爲止? – Tuxdude 2013-03-12 18:54:09

+0

'grep'是面向行的,所以你需要的不僅僅是'grep'來解決問題。你有沒有考慮寫一個簡短的腳本來解析文件呢? – nneonneo 2013-03-12 18:56:22

+0

@ Tuxdude - 我嘗試使用貓foo.txt | grep'Notification:445 \ | Mode:'但是它返回所有的模式,但是我想立即通知Mode的值!你能幫忙嗎? – karunakar 2013-03-12 18:57:46

回答

1

如果我理解你想要正確的東西,這樣的事情可能工作:

awk '/enabled/{g=$1}/Mode:/{printf "%s is %s\n",g,$NF}' foo.txt 

至少應該工作給你給出的例子。如果你要處理disabled或其他任何除enabled,那將使它更復雜一點......

+0

@ twalberg-謝謝你的回答。這是通知工作。我無法對正在返回所有模式的書籤使用相同的命令...您能幫忙嗎?還有,如果所有的都啓用了呢?我們如何能夠返回所有這些值?謝謝。 – karunakar 2013-03-12 20:58:54

+0

根據你給出的例子,該命令應該打印所有三個。它通過記住任何包含單詞'enabled'的行的第一個單詞來工作,當一行與'Mode:'匹配時,它會打印記憶單詞和'Mode'行的最後一個字段。當然,如果你的實際輸入不是真的那樣,你的結果會有所不同。 – twalberg 2013-03-12 21:02:51

+0

@ twalberg-謝謝! – karunakar 2013-03-12 21:23:25

0

假設foo.txt的,我們要提取包含每3行的第一個和最後一個字6 「基團」 的由\ n炭表達式的空間分離,其使用xargs的:

xargs -n6 < foo.txt 

「線性化」 的內容,並給出:

Notification are enabled Notification:445 Mode: valid 
Bookmark are enabled Bookmarks:556 Mode: Invalid 
Question are enabled Question:667 Mode: Unknown 

管對此內容AWK:

xargs -n6 < foo.txt | awk '{print $1" is "$6}' 

它給的東西,我想,關閉你正在尋找的東西:

Notification is valid 
Bookmark is Invalid 
Question is Unknown 

HTH