格式
sed [OPTION]... '地址定界+[高级]编辑命令' file
常用选择
- i :修改内容
- i.bak:先备份,然后再修改内容
- r:支持正则表达式
- n:不输出模式空间内容到屏幕,即不自动打印
- e:支持多点编辑,多个条件连接字符
地址定界
-
不给地址: 对全文进行处理
-
单地址:
num, $: 指定行,最后一行
/pattern/:被此处模式所能够匹配到的每一行 -
地址范围:
n,m: 第n行到第m行
n,+m: 第n行到第 n+m 行
/pat1/,/pat2/: 被此处模式所能够匹配到的之间行
n,/pat1/:第n行到被配置到的字符串之间行n, m 是数字
pat[n] 是匹配的字符串 -
步进
1~2 奇数行。第一行,步长为两行
2~2 偶数行。第二行,步长为两行
编辑命令
d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运 行~
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
w /path/somefile:保存模式匹配的行至指定文件
r /path/somefile:读取指定文件的文本至模式空间中匹配到的行后
=:为模式空间中的行打印行号
!:模式空间中匹配行取反处理
示例
- 删除/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符
[root@cloud ~]# sed -r "/^[[:space:]]*$/d" /etc/grub2.cfg
- 删除/etc/fstab文件中不以#开头,后面至少跟一个空白字符的行的行首的和空白字符
[root@cloud ~]# sed -r "/^# *|^$/d" /etc/fstab
- 在/etc/fstab文件中不以#开头的行的行首增加#号
[root@cloud ~]# sed -r -n "/^[^#]/s/(.*)/#\1/p" /etc/fstab
- 处理/etc/fstab路径使用sed命令取出其目录和基名
[root@cloud ~]# echo /etc/fstab | sed -r "s@(.*/)(.*$)@\2@"
- 利用sed取出ifconfig命令中本机的IPv4地址
[root@cloud ~]# ifconfig eth0 | sed -r -n "s/.*inet (.*) net.*/\1/p"
- 统计centos安装光盘中Package目录下的所有rpm文件的以. 分割倒数第二个字段的重复次数
[root@cloud ~]# mount /dev/cdrom /opt/dvd
[root@cloud ~]# ls /opt/dvd/Packages/ | sed -r "s/.rpm$//" | sed -r "s/.*\.(.*)/\1/" | sort | uniq -c
[root@cloud ~]# ls /opt/dvd/Packages/ | sed -r "s/.*\.(.*).rpm/\1/" | sort | uniq -c
- 将文本文件的n和n+1行合并为一行,n为奇数行
[root@cloud ~]# seq 10|xargs -n2
[root@cloud ~]# seq 10|sed 'N;s/\n/ /'