sed 使用多个搜索字符串删除行

sed 使用多个搜索字符串删除行

我有一个文本文件,比方说test1.txt,我需要删除包含狗和日期的行"29-APR-2015"

使用以下命令来完成它,但它不会删除行。

就好像我提到的只是/DOG/d删除包含DOG.

命令文件(sedcommands)

/DOG,29-APR-2015/d

测试1.txt

DOG          29-APR-2015          
DOG          29-APR-2015          
DOG          30-APR-2015          
CAT          29-APR-2015          
CAT          29-APR-2015          

命令

sed -f sedcommands test1.txt > test2.txt

答案1

使用 GNU sed:

sed '/DOG/{/29-APR-2015/d}' test1

此方法允许任何订单。 IE。DOG可以在该日期之前或之后。

答案2

POSIXly:

sed -e '/DOG/!b' -e '/29-APR-2015/!b' -e d file

b如果您不提供任何标签,请牧场到底。

或者:

sed '/DOG/{/29-APR-2015/d
}' file

现代sed实现还支持{command;}表单,这是 POSIX 接受的扩展,但不是必需的:

sed '/DOG/{/29-APR-2015/d;}' file

答案3

/DOG,29-APR-2015/dDOG不起作用,因为和之间没有逗号9-APR-2015。尝试这个;

$ sed -e '/DOG[[:space:]]*29-APR-2015/d' test1.txt 
     DOG          30-APR-2015          
     CAT          29-APR-2015          
     CAT          29-APR-2015   

[[:space:]]*DOG和之间允许有零个或多个空白字符9-APR-2015。字符类[:space:]允许普通空格和制表符,并且可以安全地与 unicode 字体一起使用。

答案4

命令文件应包含:

/DOG *29-APR-2015/d

即,DOG后跟 0 个或多个空格,后跟指定日期。

相关内容