一、语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h或--help 显示帮助。
-n或--quiet或--silent 仅显示script处理后的结果。
-V或--version 显示版本信息。动作说明
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g注:
在sed后加上-i执行后会修改原文件
$代表最后的意思
二、以行为单位的新增/删除
1.删除2~5行删除
sed '2,5d'
2.只删除第2行
sed '2d'
3.删除第3到最后一行
sed '3,$d'
4.在第2行后(亦即是加在第三行)加上drink tea?字样
sed '2a drink tea?'
5.在第2行前加上drink tea?字样
sed '2i drink tea?'
6.2行之后追加两行,例如Hello......与shell!
sed '2a Hello......\
\>shell!'
sed '2a Hello......\shell!'
7.2行之后追加三行(2行文字,1行空行)
sed '2a Hello......\shell!\n'
8.2行之后追加一行空行
sed '2a \ '
sed '2a \\'
9.2行之后追加两行空行
sed '2a \\n'
三、以行为单位的替换与显示
1.将2~5行的内容取代成Hello shell
sed '2,5c Hello shell'
2.显示文件的5~7行
sed -n '5,7p'
四、数据的搜寻并显示
1.搜索有关root关键字的行
sed -n '/root/p'
使用-n的时候只打印包含模板的行
五、数据的搜寻并删除
1.删除包含root的行,其他行输出
sed '/root/d'
六、数据的搜寻并执行命令
1.找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里Hello替换成bash
sed -n '/root{s/Hello/bash/;p;q}'
最后的q是退出
七、数据的搜寻并替换
1.基本格式
sed 's/要被取代的字符串/新的字符串/g'
2.文本里每一行结尾若为.则换成!
sed 's/\\.$/\\!/g'
例:提取ip
/sbin/ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.116 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::f816:3eff:fe47:959d prefixlen 64 scopeid 0x20<link>
ether fa:16:3e:47:95:9d txqueuelen 1000 (Ethernet)
RX packets 1388641 bytes 402972654 (384.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1408963 bytes 164970470 (157.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
/sbin/ifconfig eth0 | grep 'inet' //inet后边没有空格
inet 192.168.0.116 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::f816:3eff:fe47:959d prefixlen 64 scopeid 0x20<link>
/sbin/ifconfig eth0 | grep 'inet ' //inet后边有一个空格
inet 192.168.0.116 netmask 255.255.255.0 broadcast 192.168.0.255
/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/inet //g' //无^.*inet
192.168.0.116 netmask 255.255.255.0 broadcast 192.168.0.255
/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*inet //g'
192.168.0.116 netmask 255.255.255.0 broadcast 192.168.0.255
/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/netmask//g' //无netmask.*$
192.168.0.116 255.255.255.0 broadcast 192.168.0.255
/sbin/ifconfig eth0 | grep 'inet ' | sed 's/^.*inet //g' |sed 's/netmask.*$//g'
192.168.0.116 //获得ip
八、多点编辑
1.删除第3行到末尾的数据,并把bash替换成Hello
sed -e '3,$d' -e 's/bash/Hello/'
-e表示多点编辑,第一个编辑命令删除第3行到末尾的数据,第二条命令搜索bash替换为Hello
示例文件
#vim shell_sed.txt
zhangsan
zhangsan
lisi
lisi
wangwu
wangwu
用ergou替换lisi:
#sed -i 's/lisi/ergou/' shell_sed.txt
使用多重指令:
#sed -i 's/lisi/ergou/ ; s/zhangsan/lisi/' shell_sed.txt
使用脚本文件:
脚本:name
s/lisi/ergou/
s/zhangsan/lisi/
sed -f name shell_sed.txt
sed -f name shell_sed.txt >newshell_sed.txt //执行脚本并保存修改后的文件
sed流编辑器用法及解析
sed '1d' shell_sed.txt //删除文件的第一行
sed '1,2d' shell_sed.txt //删除文件的第一、第二行
sed '2,$d' shell_sed.txt //删除文件的第二行到最后一行
sed '/root/d' shell_sed.txt //删除匹配到root的一行
sed '/root/2d' shell_sed.txt //删除匹配到root的一行以及下一行
sed '1~2d' shell_sed.txt //删除奇数行
sed '0~2d' shell_sed.txt //删除偶数行
sed 's/wangwu/lisi/g' shell_sed.txt //全局替换
sed 's/wangwu/lisi/gi' shell_sed.txt //忽略大小写的全局替换
sed '/^$/d' shell_sed.txt //删除空行
sed -i.bak 's/wangwu/lisi/' shell_sed.txt //产生一个备份的文件以防后悔
网友评论