1.简述
sed是一种流编辑器,作用是实现对文件的增删改查,它一次处理一行内容。
sed [option]... 'script' inputfile
sed 流编辑器,实现对文件的增删改查
option 选项:
-n 屏蔽默认输出
-i 直接修改源文件
-e 可指定多个处理动作
-r 支持扩展表达式
{} 可组合多个命令,以;分隔
-f 使用sed脚本
定址符:
p 打印行
d 删除行
s 字符串替换
1 对第1行处理
1,3 对第1到3行处理
1,+3 对第1行后面3行处理
1~2 对1,3,5,7……行处理
1,$ 对1行到最后1行处理
/aa/,/bb/ 对a行到b行处理
/aaa/,9 对a行到第9行,若前9行没有,会显示后9行匹配的行
2.实战:
(注意:sed增删改如果不加 -i 选项的话只是预览模式,并没有真的增删改)
2.1 增:
i 行前插入
a 行后插入
sed -i '2ixx' m.txt 在第2行前插入行xx
sed -i '3,6ixx' m.txt 在第3-6行每行前插入xx
sed -i '2axx' m.txt 在第2行后插入xx
sed -i '/^yy/axx' m.txt 在yy开头的行后插入xx
2.2 删:
sed -i '3,5d' a.txt 删除第3到5行
sed -i '/xml/d' a.txt 删除所有包含xml的行
sed -i '/xml/!d' a.txt 删除不包含xml的行
sed -i '/^xml/d' a.txt 删除以xml开头的行
sed -i '$d' a.txt 删除最后1行
sed -i '/^$/d' a.txt 删除所有空行
sed -i '/^$/{n;/^$/d}' a.txt 删除重复空行,连续两个空行只保留一个
sed -i -r'/a|b/d' a.txt 删除a或b的行
sed -i '2,~2d' a.txt 删除2行到2的倍数行
2.3 改
(加-i选项才会真的修改源文件):
c 行替换
s 字符串替换
g global(全局替换)
sed -i '2cxx' m.txt 第2行替换成xx
sed -i '3,6cxx' m.txt 第3到6行替换成1行xx
sed -i -e '3cxx' -e '6cxx' m.txt 第3行和第6行替换成xx
sed -i '2cxx\nyy' m.txt 第2行替换成xx并换行写上yy(\n代表换行)
sed -i 's/test/demo/g' a.txt 将所有的test换成demo(常用)
sed -i 's/#ipv6=no/ipv6=yes/g' test.txt 将test.txt文件里的#ipv6=no改成ipv6=yes(sed的这种用法经常用来更改配置文件里的内容)
sed -i 's/a//g' a.txt 删除所有行的a
sed -i '4,7s/^/#/' a.txt 4到7行加#号
sed -i '4,7s/^#//' a.txt 4到7行去掉#号
sed -i 's/a/B/ig' a.txt 所有行的a替换成B(不区分大小写)
2.4 查:
sed –n ’20,30p’ b.txt 打印20到30行
sed -n '3p;6p' a.txt 打印第3和6行
sed -n '3,+6p' a.txt 打印第3行及其后6行
sed -n '/^bin/p' a.txt 打印以bin开头的行
sed -n 'p;n' a.txt 打印奇数行,n表示读下一行(隔行)
sed -n 'n;p' a.txt 打印偶数行,n表示读下一行(隔行)
sed -n '8,${n;p}' a.txt 打印8行到末尾所有的偶数行
sed -n '$=' a.txt 打印文件的行数
sed -n '/a/{=;p} ' b.txt 显示行号
sed -n l aaa.jpg 打印不可见字符