bash/shell - 从一个大日志文件中 grep 精确的消息结构
bash/shell - grep exact message structure from a big log file
我想就以下问题向您提出建议。
我有一个包含多种类型消息的大日志文件,但我只需要 grep 总是看起来像以下消息类型:
2015-03-05 15:00:05,294 abcdefgddd {
msgType: abcsefg
gggggg {
sendingTime: 1425567605270
xxxx:
yyy {
timestamp: 1425567605211
zzz:
qqq:
vvv:
}
yyy {
timestamp: 1425567605211
zzz:
qqq:
vvv:
}
aaa {
timestamp: 1425567605211
zzz:
qqq:
vvv:
}
aaa {
timestamp: 1425567605211
zzz:
qqq:
vvv:
}
}
}
这是消息结构。
我怎样才能只在 Linux shell 中 grep 那个结构。可以使用 awk/grep/sed 或任何其他建议。
谢谢大家。
由于我们不知道文件的其余部分,我们只能猜测。
这个gnu awk
把数据栈分成组,按年份分开。
awk -v RS="^2015" 'NR>1 {print RS[=10=]}' file
只获取一个部分:
awk '/^2015-03-05 15:00:05/ {f=1} /{/ {c++} /}/ {c--} f && c; !c {f=0}' file
这将从日期 2015-03-05 15:00:05
开始打印,直到所有 {}
关闭。
我想就以下问题向您提出建议。 我有一个包含多种类型消息的大日志文件,但我只需要 grep 总是看起来像以下消息类型:
2015-03-05 15:00:05,294 abcdefgddd {
msgType: abcsefg
gggggg {
sendingTime: 1425567605270
xxxx:
yyy {
timestamp: 1425567605211
zzz:
qqq:
vvv:
}
yyy {
timestamp: 1425567605211
zzz:
qqq:
vvv:
}
aaa {
timestamp: 1425567605211
zzz:
qqq:
vvv:
}
aaa {
timestamp: 1425567605211
zzz:
qqq:
vvv:
}
}
}
这是消息结构。 我怎样才能只在 Linux shell 中 grep 那个结构。可以使用 awk/grep/sed 或任何其他建议。
谢谢大家。
由于我们不知道文件的其余部分,我们只能猜测。
这个gnu awk
把数据栈分成组,按年份分开。
awk -v RS="^2015" 'NR>1 {print RS[=10=]}' file
只获取一个部分:
awk '/^2015-03-05 15:00:05/ {f=1} /{/ {c++} /}/ {c--} f && c; !c {f=0}' file
这将从日期 2015-03-05 15:00:05
开始打印,直到所有 {}
关闭。