如何使用sed命令删除具有特定文本的行?

时间:2013-08-28 12:51:28

标签: regex unix sed

我在这个论坛上看到了类似的问题,但这个问题与这些问题没什么不同。因此,请不要将此视为重复。

我有一个包含数据的文件

blah blah
blah blah Select from table blah blah QWERTY blah
Select from table
QWERTY Here
blah blah

现在我要删除同时包含Select from tableQWERTY

的所有行

预期产出:

blah blah
Select from table
QWERTY Here
blah blah

我试过如下:

sed /*Select from table*QWERTY*/d file.txt

但它不起作用。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

你和sed尝试很接近:

$ sed '/Select from table.*QWERTY/d' file
blah blah
Select from table
QWERTY Here
blah blah

您应始终使用单引号引用脚本,并且不要将shell globbing与正则表达式混淆。使用正则表达式匹配任何字符的零个或多个是.*


如果订单有保证,那么只需使用grep选项即可-v

$ grep -v 'Select from table.*QWERTY' file
blah blah
Select from table
QWERTY Here
blah blah

如果订单无法保证,则使用awk之类的语言,您可以将正则表达式匹配与逻辑运算符组合使用:

$ awk '!/Select from table/||!/QWERTY/' file
blah blah
Select from table
QWERTY Here
blah blah