OPS Notes By 枯木

1-4、Delete Lines[译]

| Comments

使用sed d命令,你可以删除行。请注意被删除的行只是输出流。就像其它sed命令一样,d命令也不能修改原始文件的内容。

默认如果你使用sed命令没有指定地址范围,它匹配所有的行。因此,接下来例子将不会打印任何输出,它匹配employee.txt文件中所有的行并且删除它们。

1
sed 'd' employee.txt

指定删除的地址范围是非常有用的。接下来有很多类似的例子:

仅删除第二行:

1
2
3
4
$ sed '2 d' employee.txt
101,John Doe,CEO
103,Raj Reddy,Sysadmin
... ...

删除1到4行:

1
2
$ sed '1,4 d' employee.txt
105,Jane Miller,Sales Manager

删除行2到最后一行:

1
2
$ sed '2,$ d' employee.txt
101,John Doe,CEO

仅删除奇数行:

1
2
3
$ sed '1~2 d' employee.txt
102,Jason Smith,IT Manager
104,Anand Ram,Developer

删除匹配词“Manager”的行:

1
2
3
4
$ sed '/Manager/ d' employee.txt
101,John Doe,CEO
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer

删除匹配有”Jason”的行到第四行:

1
2
3
$ sed '/Jason/,4 d' employee.txt
101,John Doe,CEO
105,Jane Miller,Sales Manager

:如果这儿没有匹配“Jason“的行在1到4行中,这条命令只删除第四行后匹配”Jason“的行

删除匹配“Raj“的行到最后一行:

1
2
3
$ sed '/Raj/,$ d' employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager

删除匹配”Raj”的行到匹配“Jane“的行:

1
2
3
$ sed '/Raj/,/Jane/ d' employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager

删除匹配”Jason”的行和其之后的两行:

1
2
3
$ sed '/Jason/,+2 d' employee.txt
101,John Doe,CEO
105,Jane Miller,Sales Manager

有用的删除实例

下面的实例在日常操作中是非常有用的

删除所有的空行

1
sed '/^$/ d' employee.txt

grep实现过滤空行:

1
grep -v '^$' employee.txt

删除所有注释的行(假设注释行以#号开头)

1
sed '/^#/ d' employee.txt

grep实现过滤注释行:

1
grep -v '^#' employee.txt

:当你使用多个sed命令时,此时sed遇到’d’命令,整个匹配的匹配行将被删除,并且之后的命令对于删除的行将不会执行。

–EOF–