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

Mac*_*cky 4 unix shell

我有一个日志文件,其中包含条目

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
Run Code Online (Sandbox Code Playgroud)

我想用grep并提取符合我的模式是这样的词语abc:<some_number>def:<some_number>.

$ cat "log.txt" | grep -w "abc" -w "def" >> "failed_values.txt";
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下,我failed_values.txt应该只有

abc:12
def:134
Run Code Online (Sandbox Code Playgroud)

需要注意的关键是我的模式以a :后跟数字然后是空格结束abc:122.

fal*_*tru 6

试试以下:

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

UPDATE

仅匹配abc/ def:

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