Sed工具
概述
对文本进行操作:增、删、改、查
读取:sed从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)
执行:默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行
sed命令格式
e 指定要执行的命令,只有一个编辑命令时可省略,一般在执行多个命令的时候使用。
-n 只输出处理后的行,读入时不显示
-i 直接修改目标文本文件,不展示结果
操作符
s 替换
d 删除
a 增加,当前行下面增加一行指定内容
i 插入,当前行上面增加一行指定内容
c 替换
y 字符转换
p 打印
= 打印行号
l 打印数据流中的文本和不可打印的ASCII字符
r 高级正则表达式
使用测试
1.查找
1.-e 查找 (可执行多条命令)
会有冗余输出
sed -e ‘p’ test1.sh
多条命令方法:
方式一:
sed -e ‘操作1’ -e “操作2” 文件
方式二:
sed -e ‘操作1:操作2’ 文件
方式三:
sed -e ‘n{
操作1
操作2
……
}’ 文件1
2.-n 禁止冗余输出
sed -n ‘p’ test1.sh
打印行号
sed -n ‘=’ test1.sh
3.p 打印
打印行号 =
sed -n ‘=;p’ test1.sh
打印指定行
sed -n ‘1p’ test1.sh
打印最后一行
sed -n ‘$p’ test1.sh
打印1-3行
sed -n ‘1,3p’ test1.sh
打印6-最后一行
sed -n ‘6,$p’ test1.sh
打印5+2行
sed -n ‘5,+2p’ test1.sh
指定间隔行打印
打印第2行和最后一行
打印第1行和第三行
打印偶数行
sed -n ‘n;p’ test1.sh
打印单数行
sed -n ‘p;n’ test1.sh
4.过滤
打印包含e的行的内容
sed -n ‘/e/p’ test1.sh
以root开头的行
sed -n ‘/^root/p’ /etc/passwd
以bash结尾的行
sed -n ‘/bash$/p’ /etc/passwd
2.删除
1.通过行号进行删除
删除第三行
删除第五行到第8行
sed -n ‘5,8d;p’ test1.sh
删除第五行到最后一行
sed -n ‘5,$d;p’ test1.sh
显示3-8行
sed ‘3,8!d’ test1.sh
2.匹配字符串删除
删除包含one的所有行
sed ‘/one/d’ test1.sh
删除字符串所在行到所在行之间的所有内容
sed ‘/one/,/six/d’ test1.sh
删除one six 以外的所有行
sed ‘/one/,/six/!d’ test1.sh
删除空行
sed ‘/^$/d’ test1.sh
3.替换
字符串替换
//代表保存的内容 s是字符替换
将第二个root替换成test 2p表示第二个
sed -n ‘s/root/test/2p’ /etc/passwd
将所有root替换成test gp匹配所有
sed -n ‘s/root/test/gp’ /etc/passwd
以root为开头的 把root前面的^替换成#
替换大小写
\l&将匹配到的大写字母换成小写
sed ‘s/[A-Z]/\l&/g’ test1.sh
将小写字母换成大写
\u&将匹配的小写字母全部转换成大写
sed ‘s/[a-z]/\u&/g’ test1.sh
首字母大写 去掉g就行 /g的意思就是匹配全部 uU没有本质区别
sed ‘s/[a-z]/\U&/’ test1.sh
整行替换 /c
sed ‘/one/c ok’ test1.sh
单字符串替换
y对单字符串进行替换,长度要相同,每个字符一一替换,不是整体替换
sed ‘y/one/123/’ test1.sh
4.插入
行后插入 /a
sed ‘/seven/a liwei’ test1.sh
行前插入 /i
sed ‘/seven/i qy’ test1.sh
行后插入文件
sed ‘$r 456.txt’ 123.txt
总结
1.sed命令是一种流编辑器,读取文件会进行逐行读取加上指令操作,所以过大的文件一定要拆分后再交给sed处理
2.sed -r搭配扩展正则表达式使用
3.用 -i时一定要先备份(尤其对重要文件的操作),或者先实验好确定无误时,再使用 -i
4.sed命令的重点在于增删改查四个功能,可以运用在脚本中对重要文件配置的修改,添加等作用尤其有效