Grep提取与给定模式匹配的单词

时间:2013-08-20 06:56:59

标签: shell unix

我有一个包含

等条目的日志文件
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

3 个答案:

答案 0 :(得分:6)

请尝试以下操作:

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

<强>更新

仅匹配abc / def

$ grep  -Eio '\b(abc|def):[0-9]+\b' log.txt 
abc:12
def:134
  • (abc|def)::匹配abc或(|)def后跟:
  • [0-9]+:匹配的数字。
  • \b:匹配字边界

答案 1 :(得分:1)

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

答案 2 :(得分:0)

这应该这样做:

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