一 sed删除中文
LANG=C sed -r -e "s/[\x81-\xFE][\x40-\xFE]//g" -e "s/\[\]//g" -e "s/\"//g" //删除 中文 和 [] 和 ''
面LANG=C要加上否则报错,sed后面要使用双引号,区别使用单引号,[\x81-\xFE][\x40-\xFE]代表中文
二 删除匹配行之间的内容
[root@centos7 sed]# cat sed1.txt
key1
aa
bb
cc
dd
key2
ee
ff
gg
hh
[root@centos7 sed]# sed '/key1/,/key2/{//!d}' sed1.txt //!取反,或者 sed '/key1/,/key2/{/[key1,key2]/!d}' sed1.txt
key1
key2
ee
ff
gg
hh
---如果想打印之间的内容
[root@centos7 sed]# sed -n '/key1/,/key2/{//!p}' sed1.txt
aa
bb
cc
dd
三调换字段的位置
四删除匹配行的后一行,和前一行
sed -e '/PARTITION/{n;d}' -e '$!N;/\n.*PARTITION/!P;D' create_table-aa.txt
打印匹配行的上一行
sed -n '/PARTITION/{x;p};h' create_table-aa.txt
四 根据时间格式往前减少8个小时,并原样输出:
[root@localhost ~]# cat hhh.txt
2019/7/8 3:00 8
2019/7/8 17:00 216
2019/7/8 18:00 95
2019/7/8 19:00 166
2019/7/8 20:00 80
2019/7/8 21:00 128
2019/7/8 22:00 482
2019/7/8 23:00 126
2019/7/9 0:00 40
2019/7/9 1:00 154
2019/7/9 2:00 213
2019/7/9 3:00 205
2019/7/9 4:00 152
2019/7/9 17:00 45
2019/7/9 18:00 263
2019/7/9 19:00 198
2019/7/9 20:00 3
2019/7/9 21:00 208
2019/7/9 22:00 234
2019/7/9 23:00 30
2019/7/10 0:00 105
2019/7/10 1:00 51
2019/7/10 2:00 27
2019/7/10 4:00 14
2019/7/10 5:00 2
2019/7/10 6:00 107
2019/7/10 7:00 6
2019/7/10 16:00 63
2019/7/10 17:00 253
2019/7/10 18:00 231
2019/7/10 19:00 25
2019/7/10 20:00 8
2019/7/10 21:00 274
2019/7/10 22:00 223
2019/7/10 23:00 36
2019/7/11 0:00 268
2019/7/11 1:00 113
2019/7/11 17:00 80
2019/7/11 18:00 61
2019/7/11 19:00 8
2019/7/11 12:00 15
2019/7/11 13:00 29
2019/7/11 15:00 25
2019/7/11 15:00 328
2019/7/11 16:00 10
2019/7/11 17:00 168
2019/7/11 18:00 231
2019/7/11 19:00 354
2019/7/11 22:00 143
2019/7/11 23:00 1
2019/7/12 8:00 2
2019/7/12 9:00 109
#定义分隔符和将输出分隔符为空,再采取将字段拼接的方式组合出来
awk的if else:awk '{if (表达式){结论} else(表达式){结论}}' 文件名
[root@localhost ~]# sed 's/\t//g' hhh.txt |awk -v OFS='' -F '[ :/]+' '{if($4>=8){$4=$4-8;print $1"/"$2"/"$3" "$4":"$5}else{$3=$3-1;$4=$4+24-8;print $1"/"$2"/"$3" "$4":"$5}}'
2019/7/7 19:008
2019/7/8 9:00216
2019/7/8 10:0095
2019/7/8 11:00166
2019/7/8 12:0080
2019/7/8 13:00128
2019/7/8 14:00482
2019/7/8 15:00126
2019/7/8 16:0040
2019/7/8 17:00154
2019/7/8 18:00213
2019/7/8 19:00205
2019/7/8 20:00152
2019/7/9 9:0045
2019/7/9 10:00263
2019/7/9 11:00198
2019/7/9 12:003
2019/7/9 13:00208
2019/7/9 14:00234
2019/7/9 15:0030
2019/7/9 16:00105
2019/7/9 17:0051
2019/7/9 18:0027
2019/7/9 20:0014
2019/7/9 21:002
2019/7/9 22:00107
2019/7/9 23:006
2019/7/10 8:0063
2019/7/10 9:00253
2019/7/10 10:00231
2019/7/10 11:0025
2019/7/10 12:008
2019/7/10 13:00274
2019/7/10 14:00223
2019/7/10 15:0036
2019/7/10 16:00268
2019/7/10 17:00113
2019/7/11 9:0080
2019/7/11 10:0061
2019/7/11 11:008
2019/7/11 4:0015
2019/7/11 5:0029
2019/7/11 7:0025
2019/7/11 7:00328
2019/7/11 8:0010
2019/7/11 9:00168
2019/7/11 10:00231
2019/7/11 11:00354
2019/7/11 14:00143
2019/7/11 15:001
2019/7/12 0:002
2019/7/12 1:00109
五 sed删除前多少行
sed -i '1,10000d' /home/elastic/profile.log #删除前一万行,并修改了原文件
六 sed在指定字符串前后插入一个字符串
1 在前后新行插入的情况
[root@peklpcbipo1 test]# cat yy.txt
123
path.data: 456
789
[root@peklpcbipo1 test]# sed '/456$/a\ test' yy.txt
123
path.data: 456
test
789
2 在选定行的前后插入
[root@peklpcbipo1 test]# cat yy.txt
123
path.data: 456
789
[root@peklpcbipo1 test]# sed 's/^path.data/test &/' yy.txt #前插入
123
test path.data: 456
789
[root@peklpcbipo1 test]# sed 's/456$/& test/' yy.txt #后插入
123
path.data: 456 test
789