我有一个文本文件,比方说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 个或多个空格,后跟指定日期。