sed流编辑器,擅长对文本进行增删改查,过滤指定的字符串和取指定行,也能够在行中字符串先后插入内容,功能很是强大.linux
sed命令的语法及经常使用选项:ios
sed [OPTION]... {script-only-if-no-other-script} [input-file] 选项 sed内置命令符 文本文件
选项 | 选项说明 |
-n | 取消默认输出,只打印被sed处理的行正则表达式 (sed相似cat,不加-n会输出全部内容)缓存 |
-e | 使用-e能够屡次编辑,但要注意顺序会影响编辑的结果 |
-r | 使用此参数后,配合使用正则表达式无需\转义 |
-i | 直接修改(替换)文本内容,不在屏幕输出显示 |
sed的内置命令符经常使用于实现对文本的操做功能,如增删改查等: app
内置命令符 | 说明 |
a | append,在指定行后添加一行或多行文本 |
d | delete,删除指定行 |
p | print,打印匹配到的行,有时候会和-n参数配合使用 |
s | 用一个字符串替换另外一个字符串 |
g | global,在行内进行全局替换 |
i | insert,在指定行前添加一行或者多行文本 |
如下文本为测试文件. 编辑器
[root@test ~]# cat a.txt 101 zhangsan guangdong 333 555 102 lisi guangxi 444 555 666 103 wangyi hunan 111 222 333 104 libai hubei 999 1000 777 105 dupu beijing 11122 3333222 5555
[root@test ~]# sed -n '/libai/p' a.txt #<==打印字符串所在行 104 libai hubei 999 1000 777 [root@test ~]# sed -n '1,2p' a.txt #<==按照行号打印行,打印连续行 101 zhangsan guangdong 333 555 102 lisi guangxi 444 555 666 [root@test ~]# ifconfig eth0|sed -nr 's/^.*net (.*) net.*$/\1/gp' #<==c7.x中,gp配合使用,经常使用用法 10.0.0.30
[root@test ~]# sed '/zhangsan/d' a.txt #<==删除包含指定字符串的全部行(缓存中删除) 102 lisi guangxi 444 555 666 103 wangyi hunan 111 222 333 104 libai hubei 999 1000 777 105 dupu beijing 11122 3333222 5555 [root@test ~]# sed '3d' a.txt #<==删除指定行(缓存中删除) 101 zhangsan guangdong 333 555 102 lisi guangxi 444 555 666 104 libai hubei 999 1000 777 105 dupu beijing 11122 3333222 5555 [root@test ~]# sed '2,5d' a.txt #<==删除2,3,4,5行,连续多行删除 101 zhangsan guangdong 333 555 [root@test ~]# sed -i '4d' a.txt #<==真正删除内容 [root@test ~]# sed '3,$d' a.txt #<===删除第3行至末尾,剩下的都被打印显示 101 zhangsan guangdong 333 555 102 lisi guangxi 444 555 666 [root@test ~]# sed '/^$/d' a.txt #<==删除空行
[root@test ~]# sed 's/libai/libaibai/g' a.txt #<==全局替换单个字符串单词 101 zhangsan guangdong 333 555 102 lisi guangxi 444 555 666 103 wangyi hunan 111 222 333 104 libaibai hubei 999 1000 777 105 dupu beijing 11122 3333222 5555 [root@test ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config #<==系统优化选项 [root@test ~]# cat b.txt #<==若是没有g全局替换,默认是将每一行的第一个匹配的字符串替换 1111 BBBBB CCCCC 1111 AAAA 2222 3333 1111 DDDD 1111 [root@test ~]# sed 's/1111/EEEE/' b.txt EEEE BBBBB CCCCC 1111 AAAA 2222 3333 EEEE DDDD 1111 [root@test ~]# sed -n 's/^101/DDD/p' a.txt #<==只有匹配了101并替换才会打印此行 DDD zhangsan guangdong 333 555 [root@test ~]# ifconfig eth0|sed -nr 's/^.*net (.*) net.*$/\1/gp' #<==替换并打印IP地址 10.0.0.30
注意: a 增长内容是在行后; i 插入内容是在行前测试
[root@test ~]# sed '3a 103.3 liubei sichuang 456 123 789' a.txt #<==在指定行后增长内容 101 zhangsan guangdong 333 555 102 lisi guangxi 444 555 666 103 wangyi hunan 111 222 333 103.3 liubei sichuang 456 123 789 104 libai hubei 999 1000 777 105 dupu beijing 11122 3333222 5555 [root@test ~]# sed -i '3a 103.3 liubei sichuang 456 123 789' a.txt #<==真正增长内容 [root@test ~]# sed '2i 101.1 liubei sichuang 444 556 111' a.txt 101 zhangsan guangdong 333 555 101.1 liubei sichuang 444 556 111 102 lisi guangxi 444 555 666 103 wangyi hunan 111 222 333 104 libai hubei 999 1000 777 105 dupu beijing 11122 3333222 5555 [root@test ~]# sed -i '2i 101.1 liubei sichuang 444 556 111' a.txt #<==真正插入内容 [root@test ~]# sed 's/lisi/nihao &/' a.txt #<==在指定字符串(文本中惟一)前插入内容,注意看状况是否添加空格 101 zhangsan guangdong 333 555 102 nihao lisi guangxi 444 555 666 103 wangyi hunan 111 222 333 104 libai hubei 999 1000 777 105 dupu beijing 11122 3333222 5555 [root@test ~]# sed 's/lisi/& nihao/' a.txt #<==在指定字符串(文本中惟一)后插入内容,注意看状况是否添加空格 101 zhangsan guangdong 333 555 102 lisi nihao guangxi 444 555 666 103 wangyi hunan 111 222 333 104 libai hubei 999 1000 777 105 dupu beijing 11122 3333222 5555 [root@test ~]# sed 's/rhgb/& crashkernel=auto biosdevname=0 net.ifnames=0/' /etc/sysconfig/grub.bak #<==c7.x系统优化内核实例 [root@test ~]# sed '3 s/wangyi/& test/' a.txt #<==指定行号,在某个字符串后插入内容 [root@test ~]# sed 's/^/HEAD&/' a.txt #<==在每行行头添加内容 HEAD101 zhangsan guangdong 333 555 HEAD102 lisi guangxi 444 555 666 HEAD103 wangyi hunan 111 222 333 HEAD104 libai hubei 999 1000 777 HEAD105 dupu beijing 11122 3333222 5555 [root@test ~]# sed 's/$/&HEAD/' a.txt #<==在每行行尾添加内容 101 zhangsan guangdong 333 555HEAD 102 lisi guangxi 444 555 666HEAD 103 wangyi hunan 111 222 333HEAD 104 libai hubei 999 1000 777HEAD 105 dupu beijing 11122 3333222 5555HEAD