3. 删除行 (d 命令)


使用 sed 的d命令,您可以删除行。 请注意,这些行仅从输出流中删除。 就像任何其他 sed 命令一样,d命令不会修改原始输入文件的内容。

默认情况下,如果您在 sed 命令之前没有指定任何地址范围,它将匹配所有行。 因此,下面的示例不会打印任何内容,因为它匹配employee.txt中的所有行并删除它们。

sed 'd' employee.txt

指定要删除的地址范围非常有用,以下是一些示例。

$ sed '2 d' employee.txt
101,John Doe,CEO
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
$ sed '1,4 d' employee.txt
105,Jane Miller,Sales Manager
$ sed '2,$ d' employee.txt
101,John Doe,CEO
$ sed '1~2 d' employee.txt
102,Jason Smith,IT Manager
104,Anand Ram,Developer
$ sed '/Manager/ d' employee.txt
101,John Doe,CEO
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
$ sed '/Jason/,4 d' employee.txt
101,John Doe,CEO
105,Jane Miller,Sales Manager
注意:如果前 4 行中没有匹配到 "Jason",则此命令仅删除在第 4 行之后与 "Jason" 匹配的行。
$ sed '/Raj/,$ d' employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager 
$ sed '/Raj/,/Jane/ d' employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
$ sed '/Jason/,+2 d' employee.txt
101,John Doe,CEO
105,Jane Miller,Sales Manager

下面的例子对于日常的实际操作非常有帮助。

sed '/^$/ d' employee.txt
sed '/^#/ d' employee.txt
小心:当你有多个 sed 命令时,在遇到 d 命令时,匹配该模式的整行将被删除,并且不会在删除的行上执行任何其他命令。