sed命令--三剑客老二

格式

sed [OPTION]... '地址定界+[高级]编辑命令' file

常用选择

  • i :修改内容
  • i.bak:先备份,然后再修改内容
  • r:支持正则表达式
  • n:不输出模式空间内容到屏幕,即不自动打印
  • e:支持多点编辑,多个条件连接字符

地址定界

  1. 不给地址: 对全文进行处理

  2. 单地址:
    num, $: 指定行,最后一行
    /pattern/:被此处模式所能够匹配到的每一行

  3. 地址范围:
    n,m: 第n行到第m行
    n,+m: 第n行到第 n+m 行
    /pat1/,/pat2/: 被此处模式所能够匹配到的之间行
    n,/pat1/:第n行到被配置到的字符串之间行

    n, m 是数字
    pat[n] 是匹配的字符串

  4. 步进
    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:读取指定文件的文本至模式空间中匹配到的行后
=:为模式空间中的行打印行号
!:模式空间中匹配行取反处理

示例

  1. 删除/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符
[root@cloud ~]# sed -r "/^[[:space:]]*$/d" /etc/grub2.cfg
  1. 删除/etc/fstab文件中不以#开头,后面至少跟一个空白字符的行的行首的和空白字符
[root@cloud ~]# sed -r "/^# *|^$/d" /etc/fstab
  1. 在/etc/fstab文件中不以#开头的行的行首增加#号
[root@cloud ~]# sed -r -n "/^[^#]/s/(.*)/#\1/p" /etc/fstab
  1. 处理/etc/fstab路径使用sed命令取出其目录和基名
[root@cloud ~]# echo /etc/fstab | sed -r "s@(.*/)(.*$)@\2@"
  1. 利用sed取出ifconfig命令中本机的IPv4地址
[root@cloud ~]# ifconfig eth0 | sed -r -n "s/.*inet (.*) net.*/\1/p"
  1. 统计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
  1. 将文本文件的n和n+1行合并为一行,n为奇数行
[root@cloud ~]# seq 10|xargs -n2
[root@cloud ~]# seq 10|sed 'N;s/\n/ /'
上一篇:压测—ab


下一篇:深度解读 MongoDB 最全面的增强版本 4.4 新特性