sed 常见用例总结

sed 发行于1974年,作者 Lee E. McMahon。awk发行于1977年,作者 阿尔佛雷德·艾侯、彼得·温伯格以及布莱恩·柯林汉。

——源自维基百科

常见用例

  • 文件最后追加

    1
    sed '$ a\00 08 * * * /sbin/clock -w >/dev/null 2>&1' /var/spool/cron/root
  • 输出满足正则的记录

    1
    sed -n '/正则表达式/p' /var/spool/cron/root
  • 删除满足正则的记录

    1
    sed -i '/正则表达式/d' /var/spool/cron/root
  • sed删除多行

    1
    2
    3
    sed -i '/START/,/END/d' /etc/rsyncd.conf
    eg:
    sed -i '/\[root\]\s*/,/\s*hosts\s*allow\s*=\s*10.0.0.0\/8\s*192.168.0.0\/16\s*/d' rsyncd.conf
  • 将所有数字版本号统一

    • sed正则中{}()需要加转义,[]则不用。|+也需要转义,$不需要转义。
1
find /data/daemon/conf/ -name "*.yaml" -type f |xargs grep -irl "version:v" |xargs sed -i 's/version:v[0-9]\{1\}/version:v9/g'
  • 将软件版本号去掉
    1
    rpm -qa |grep someone|sed 's/\([0-9]\|\.\|_\|-\)\+\.el.\+\(.x86_64\|.noarch\)/\2/g'

备注说明

  • 有些版本的sed正则中不支持\d,小括号和加号都要加转义符
    1
    2
    eg:
    rpm -qa |grep php |sed 's/-[0-9]\(.*\)\+$/-flag/g;s/^php-/php71-/g'

参考文档

推荐文章(由hexo文章推荐插件驱动)