Sed的使用

2 分钟阅读

选项说明

-n : 使用安静模式,只有被处理的行才会显示出来,通常与p一起用

-i : 将修改回写到文件中

-r : 支持扩展的正则表达式,使用正则时最好带上,并且对表达式用’’

匹配操作

sed -n /world/p test.txt : 显示包含world的行 sed -n '2,/world/p' test.txt : 显示从第2行到第一个出现world的中间行

替换操作

sed s/h/H/ test.txt : 将每行第一个h改成H sed s/h/H/1 test.txt : 将每行第一个h改成H sed s/h/H/2 test.txt : 将每行第二个h改成H sed s/h/H/g test.txt : 将每行的所有h改成H sed 1s/h/H/ test.txt : 将第一行第一个h改成H sed -i s/h/H/ test.txt : 将修改写入到源文件 sed -n s/h/H/p test.txt : 只打印替换后的行

删除操作

sed /world/d test.txt:删除匹配world的行 sed /^$/d test.txt:删除空行 sed '1d' test.txt:删除第一行 sed '1,/^$/d' test.txt:删除第一行到空行 sed '2,5d' test.txt:删除2到5行 sed '2,$d' test.txt:删除2到最后一行

正则匹配

  • [[:digit:]]:匹配数字
  • [0-9]:匹配数字
  • [^0-9]:匹配非数字

举例

  1. 打印linux的名称

    $ sed -n s/^NAME=//p /etc/os-release
    "Ubuntu"
    $ sed -r -n 's/^NAME="?([^"]+)"?/\1/p' /etc/os-release
    Ubuntu
    

    其中/etc/os-release内容如下:

    $ cat /etc/os-release
    NAME="Ubuntu"
    VERSION="16.04.5 LTS (Xenial Xerus)"
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME="Ubuntu 16.04.5 LTS"
    VERSION_ID="16.04"
    HOME_URL="http://www.ubuntu.com/"
    SUPPORT_URL="http://help.ubuntu.com/"
    BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
    VERSION_CODENAME=xenial
    UBUNTU_CODENAME=xenial