sed
逐行读取内容到模式空间内,进行匹配编辑操作,若不匹配直接输出到屏幕
常用选项: -n 不输出模式空间的内容到屏幕 -e 可以指定多个编辑命令 -f /PATH/TO/SED_SCRIPT_FILE 每行一个编辑命令 -r 支持扩展正则表达式 -i 直接编辑源文件 地址定界: 1) 不提供地址: 对全文进行处理(空地址) 2) 单地址: # 指定行 /pattern/ :被此模式匹配到的每一行 3) 地址范围: num1,num2 起始行到结束行 num1,+num2 起始行+#行 num,/pattern/ #开始到/pattern/结束 /pattern/,/pattern/ 4) 步进 ~ 1~2 表示从第一行开始,每次前进2行 所有奇数行 [root@node1 network-scripts]# cat -n ifcfg-ens33 1 TYPE=Ethernet 2 BOOTPROTO=static 3 DEFROUTE=yes 4 NAME=ens33 5 DEVICE=ens33 6 ONBOOT=yes 7 IPADDR=172.20.1.11 8 NETMASK=255.255.255.0 9 GATEWAY=172.20.1.254 [root@node1 network-scripts]# sed -n '1~2p' ifcfg-ens33 TYPE=Ethernet DEFROUTE=yes DEVICE=ens33 IPADDR=172.20.1.11 GATEWAY=172.20.1.254 [root@node1 network-scripts]# sed -n '2~2p' ifcfg-ens33 BOOTPROTO=static NAME=ens33 ONBOOT=yes NETMASK=255.255.255.0 编辑命令: d 删除匹配到的行 sed '1,8d' /etc/fstab p 打印匹配到的行 sed -n '1~2p' /etc/fstab a 在匹配到的行后追加文本,支持使用\n实现多行追加 sed '${num1}a \new line' /etc/fstab i 在模式匹配到的行前面插入文本 sed '${num1}i \new line' /etc/fstab c \text 把匹配到的行替换成text 内容 sed '/fstab/c \new line' /etc/fstab w /PATH/TO/SOMEFILE 保存匹配到的行到指定文件中 sed '/^[^#]/w /tmp/fstab' /etc/fstab r /PATH/FROM/SOMEFILE 读取指定文件到匹配到的行后面,实现文件合并 sed '3r /etc/issue' /etc/fstab = 为匹配到的行打印行号 sed '/^UUID/=' /etc/fstab ! 条件取反 sed '/^#/!d' /etc/fstab sed '地址定界!编辑命令' s/// 查找替换,分隔符可自行指定常用有s@@@,s###,s%%% 替换标记 g 全局替换 w /PATH/TO/SOMEFILE 替换成功的结果保存至文件中 p 只显示替换成功的行 sed 's/^[[:space:]]\+//' /etc/grub2.cfg sed 's/^#[[:space:]]*//' /etc/fstab sed -e 's/^#[[:space:]]*//' -e '/^UUID/d' /etc/fstab ~]# echo /var/log/message/ |sed -r 's#[^/]+/?$##' /var/log/ 高级编辑命令 h 把模式空间中的内容覆盖到保持空间 H 把模式空间中的内容追加到保持空间 g 把保持空间中的内容覆盖到模式空间 G 把保持空间中的内容追加到模式空间 x 把模式空间中的内容和保持空间互换 n 覆盖读取匹配到行的下一行至模式空间 N 追加读取匹配到行的下一行至模式空间 d 删除模式空间中的行 D 删除模式空间中的所有行 sed -n 'n;p' /etc/fstab # 显示偶数行 读取第一行,执行n读取下一行到模式空间,p显示模式空间内容,循环往复 sed '1!G;h;$!d' /etc/fstab 逆序显示文件内容 sed '$!d' FILE
来源:https://www.cnblogs.com/liy36/p/12147913.html