sed的一些用法总结

一 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值