【Shell】Shell编程之文本处理器——sed

sed        类似于vim文本编辑器,sed是按行进行编辑和处理

sed的主要作用就是对文本内容进行增删改查

sed支持正则表达式和扩展正则表达式

sed的原理:读取、执行和显示,三个过程

读取:读取文本内容,并存放到临时的缓冲区,模式空间;

执行:然后在模式空间根据读取到的文本内容,按行执行;除非指定行号,否则会遍历所有行,从上往下依次执行

显示:执行完之后,把执行结果打印,只是操作并展示结果,不会写入文件,展示完后模式空间的数据会立即删除;如果要改变生效,模式空间被修改的内容会写入到指定的文件当中

sed文本内容处理工具:

文件过大时需要差分处理

split -l    按行分割
split -b    按大小分割(一般不用,可能会有所损坏)

cat 文件名 | sed处理        #适用于中型文件;大型文件还是先分割的好
sed -e '操作符' 文件1 -e '操作符' 文件2
只对一个文件进行操作时可以不加-e

常用选项:
    -e    条件操作选项;对多个文件进行操作时用-e加以区分
    -f    指定脚本文件来处理输入的文件内容,把命令写在脚本中,用脚本里的命令来处理第二个文件里面的内容
    -i    立即生效;慎用!
    -n    显示script处理之后的结果;禁止sed的默认输出
    -r    表示使用正则表达式

        操作符:
=    输出行号
sed -n '=;p' 文件名        #输出行号及内容
s    替换;替换指定字符
d    删除;删除指定的行
a    增加;在当前行的下面插入指定内容
i    增加;在指定行的上面插入执行的内容
c    替换;整行替换
y    替换;替换字符,但是替换前后的字符长度必须一致
p    打印

sed常用:改>删>增;查一般使用grep

查找

行号范围打印:","表示"到";";"表示"和"

sed -n '1p' 文件A         #打印文件A的第1行
sed -n '$p' 文件A         #打印文件A的最后1行
sed -n '1,3p' 文件A       #打印文件A的第1到第3行
sed -n '1,+2p' 文件A      #打印文件A的第1行及其后两行
sed -n '1;$p' 文件A       #打印文件A的第1和最后1行

奇数行和偶数行打印:

sed -n 'n;p' 文件名        #打印奇数行;'n'表示跳过一行打印下一行
sed -n 'p;n' 文件名        #打印偶数行;'n'在后表示打印当前行跳过后一行

文本过滤模式:

1.对包含指定字符串的内容进行打印

sed -n '/t/p' 文件A        #过滤出文件A中含有t的行并打印
sed -n '/test/p' 文件A     #过滤出文件A中含有test的行并打印

2.应用基础正则表达式进行打印

sed -n '/^root/p' /etc/passwd        #过滤出passwd中以root开头的行并打印
sed -n '/bash$/p' /etc/passwd        #过滤出passwd中以bash结尾的行并打印

3.扩展正则表达式

sed -r -n '/(99:){2}/p' /etc/passwd     #过滤出passwd中连续出现两个"99:"的行

sed -r -n '/^root|bash$/p' /etc/passwd    #过滤出passwd中以root开头或者以bash结尾的行

删除

***免交互删除

sed -i 'd' 文件A         #删除文件A内的所有内容;i表示生效,慎用!

cat /dev/null > 文件A    #通过将黑洞文件写入文件A,达到清空的目的

指定行号删除

sed -n '3d;p'

匹配字符串内容,删除

取反删除

删除空行

替换

s    替换字符串
c    整行替换
y    单字符替换,前后长度要保持一致

字符串替换

2g替换第二个;gp替换所有

整行替换

单字符替换

增加

a    增加;在当前行的下面插入指定内容
i    增加;在指定行的上面插入执行的内容
r    在行后读入指定文件的内容

***查看版本号

查看指定时间范围内的日志

你可能感兴趣的:(linux,运维,服务器)