![sed 使用多个搜索字符串删除行](https://linux22.com/image/63989/sed%20%E4%BD%BF%E7%94%A8%E5%A4%9A%E4%B8%AA%E6%90%9C%E7%B4%A2%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%88%A0%E9%99%A4%E8%A1%8C.png)
我有一个文本文件,比方说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/d
DOG
不起作用,因为和之间没有逗号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 个或多个空格,后跟指定日期。