0%

Linux--sed获取指定时间段日志.md

sed的简单使用

删除指定字符行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# 删除以a开头的行
[root@vm14 home]# cat test
1111
qqqq
aaaa
bbbb
cccc
2222
[root@vm14 home]# sed -i '/^a/d' test
[root@vm14 home]# cat test
1111
qqqq
bbbb
cccc
2222
#删除包含a的行,尽量不要这样子操作,只要内容中包含都会删除掉,除非你确定
[root@vm14 home]# cat test
1111
qqqq
aaaa
bbba
cccc
2222
[root@vm14 home]# sed -i '/a/d' test
[root@vm14 home]# cat test
1111
qqqq
cccc
2222


# 删除以)开头的行的上一行末尾的逗号,用在sql上大部分
[root@vm14 home]# cat test
CREATE TABLE test1 (
ID number(11) ,
name varchar2(32) ,
);

CREATE TABLE test2 (
ID number(11) ,
name varchar2(32) ,
);

CREATE TABLE test3 (
ID number(11) ,
name varchar2(32) ,
);
[root@vm14 home]# sed '/,\s*$/{:loop; N; /,\(\s*\|\n\))/! bloop; s/,\s*[\n]\?\s*)/\n)/}' test
CREATE TABLE test1 (
ID number(11) ,
name varchar2(32)
);

CREATE TABLE test2 (
ID number(11) ,
name varchar2(32)
);

CREATE TABLE test3 (
ID number(11) ,
name varchar2(32)
);

截取日志

首先生成类似日志文件格式的测试文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
for i in `seq 1 24`  
do
for j in `seq 1 60`
do
echo "2020-08-11 $i:$j [http-nio-8080-exec-15] INFO" >>test
done
done
# 生成的文件,大概就这样,日期加上时间,差不多就这样
cat test
2020-08-11 1:1 [http-nio-8080-exec-15] INFO
2020-08-11 1:2 [http-nio-8080-exec-15] INFO
2020-08-11 1:3 [http-nio-8080-exec-15] INFO
2020-08-11 1:4 [http-nio-8080-exec-15] INFO
2020-08-11 1:5 [http-nio-8080-exec-15] INFO
2020-08-11 1:6 [http-nio-8080-exec-15] INFO
2020-08-11 1:7 [http-nio-8080-exec-15] INFO
2020-08-11 1:8 [http-nio-8080-exec-15] INFO
2020-08-11 1:9 [http-nio-8080-exec-15] INFO
2020-08-11 1:10 [http-nio-8080-exec-15] INFO
2020-08-11 1:11 [http-nio-8080-exec-15] INFO
2020-08-11 1:12 [http-nio-8080-exec-15] INFO
2020-08-11 1:13 [http-nio-8080-exec-15] INFO
2020-08-11 1:14 [http-nio-8080-exec-15] INFO
2020-08-11 1:15 [http-nio-8080-exec-15] INFO
2020-08-11 1:16 [http-nio-8080-exec-15] INFO
2020-08-11 1:17 [http-nio-8080-exec-15] INFO
2020-08-11 1:18 [http-nio-8080-exec-15] INFO
2020-08-11 1:19 [http-nio-8080-exec-15] INFO
2020-08-11 1:20 [http-nio-8080-exec-15] INFO
.....

使用sed进行截取,一般日期时间都是放到最前面的,这个是运维必须的规范,如果不是,请告知研发修改日志输出格式,或者自己修改日志配置文件。

1
2
3
# 截取凌晨21点到22点的日志
# 格式 sed -n 时间段 源文件 > 生成的文件 千万要加上^,否则会将段内有匹配的也筛出来
sed -n '/^2020-08-11 21/,/^2020-08-11 22/p' test >test1