2013-08-20 31 views
3

我有條目的日誌文件中的字像grep來提取匹配給定的模式

INFO 2013-08-16 13:46:48,660 Index=abc:12 insertTotal=11 
INFO 2013-08-16 13:46:48,660 Index=abcd:12 insertTotal=11 
INFO 2013-08-16 13:46:48,660 Index=def:134 insertTotal=11 
INFO 2013-08-16 13:46:48,660 Index=abkfe insertTotal=11 
INFO 2013-08-16 13:46:48,660 Index=lmkfe insertTotal=11 
INFO 2013-08-16 13:46:48,660 Index=lmkfe insertTotal=11 

我想grep和提取符合我的模式是abc:<some_number>def:<some_number>的話。

$ cat "log.txt" | grep -w "abc" -w "def" >> "failed_values.txt"; 

因此,在這種情況下,我failed_values.txt應該只有

abc:12 
def:134 

要注意的關鍵是,我的模式與:後跟一個數字,然後一個空間E結束。 G。 abc:122

+0

你什麼是模式? – 2013-08-20 06:59:39

+0

編輯了這個問題。謝謝@Tichodroma – Macky

+0

爲什麼'abcd:12'不包括在內? – falsetru

回答

5

嘗試以下操作:

$ grep -Eio '[a-z]+:[0-9]+' log.txt 
abc:12 
abcd:12 
def:134 
  • -i忽略大小寫。
  • -o只打印匹配的部分。

UPDATE

只匹配abc/def

$ grep -Eio '\b(abc|def):[0-9]+\b' log.txt 
abc:12 
def:134 
  • (abc|def)::匹配abc或(|)def隨後:
  • [0-9]+:匹配的數字。
  • \b:匹配單詞邊界
+0

謝謝@falsetru但我的前綴不是變量,即這個詞總是以abc開頭: 或def: Macky

+0

@John,我添加了更新的代碼。 – falsetru

+0

謝謝@falsetru。這工作。 – Macky

0

這應做到:

grep "[ad][be][cf]:[0-9]*" [your file]

1
$ grep -Eo "(abc|def):[0-9]*" log.txt 
abc:12 
def:134