我有一个包含
等条目的日志文件INFO 2013-08-16 13:46:48,660 Index=abc:12 insertTotal=11 ERROR: [doc=abc:d1c3f0]
INFO 2013-08-16 13:46:48,660 Index=abcd:12 insertTotal=11 ERROR: [doc=def:d1cwqw3f0]
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
我需要点击 [doc = 和] 之间的部分,即abc:d1c3f0和def:d1cwqw3f0 所以我希望做类似的事情 ^(ABC | DEF)*] $
答案 0 :(得分:4)
或sed
:
sed -n 's/.*\[doc=\(.*\)\].*/\1/p' filename
-n
:不打印行
.*\[doc=
匹配以[doc=
\(.*\)
在缓冲区中存储尽可能多的字符,同时仍然完成匹配
\].*
匹配]
后跟尽可能多的
\1
替换所有与\(.*\)
p
打印此行
答案 1 :(得分:1)
grep
救援:
$ grep -Po '(?<=\[doc=)[^\]]+' file
abc:d1c3f0
def:d1cwqw3f0
从doc=
((?<=\[doc=)
部分)到]
字符([^\]]+
部分)之前的任何内容都可以获得所有内容。
或awk
:
$ awk -F"[][=]" '{print $5}' file
abc:d1c3f0
def:d1cwqw3f0
-F"[][=]"
定义了不同的可能字段分隔符[
,]
或=
。然后,它打印出第5个“片段”。