Linux Sed与日志截取

grep、sed、awk号称Linux文本处理三剑客,grep用于文本过滤,sed适合行处理,awk适合列处理,awk以前有两篇文章介绍过,今天介绍一下sed的使用。

一、Sed基本用法

sed是流编辑器,一次处理一行数据,它先把当前一行数据存储在临时缓存区,然后用sed命令处理缓存区内容,处理完成后把缓存区内容输出到屏幕,接着再处理下一行,一直到文件末尾,与awk处理方式是一样的,并且原文件不会被改动。

# sed.txt
千豪是个好人
千豪是个帅哥
千豪要成为一个有钱人

1、文本替换

#将sed.txt文件里的千豪替换为万豪
sed -i 's/千豪/万豪/g' sed.txt

-i:会修改源文件
s: 替换命令
g: 全局替换,如果不加g只替换每一行第一次匹配的模式

#将sed目录下所有文件里千豪替换为万豪
sed -i 's/千豪/万豪/g' `find /root/sed -type f`

2、文本删除

#删除单个文件或目录下所有文件中的空行 ^$匹配空行
sed -i '/^$/d' sed.txt
sed -i '/^$/d' `find /root/sed/ -type f`
#删除符合条件的行
sed -i '/好人/d' sed.txt
# 删除从第2行到末尾
sed -i '2,$d' sed.txt

3、文本追加

#在有钱人后面加准了
sed -i 's/有钱人/& 准了/g' sed.txt

二、Sed在日志截取的应用

当需要排查以前某一个时间段的日志,日志文件比较大没有办法直接用vi打开,这时可以用sed将当时的日志截取出来进行分析。

#截取出日志里从19点00开始到19点05的日志
sed -n '/^19:00:00/,/^19:05:59/p' nohup.out

但上面的语句,需要日志文件里有19:00:00时的记录否则是匹配不了,我们可以使用正则来匹配截取出19:00到19:05的日志如下。

sed -n '/^19:00:[0-5][0-9]/^19:05:[0-5][0-9]/p' nohup.out
#截取出日志文件从第几行到第几行的输出,今天刚好用到这条语句需要
#将日志里输出的数据和业务方核对
sed -n '113406,114017p' so_log.txt > so_log2.txt

你可能感兴趣的:(系统运维,linux,bash,vim)