Sed的使用
选项说明
-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]
:匹配非数字
举例
-
打印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