我需要删除文件中包含两个单独关键字的所有行
示例文件:
2 563587992014-01-26 2014-01-26T09:45:53 DC 14003 5 3.60
2 563589242014-01-26 2014-01-26T10:03:13 DC 14003 6 4.80
2 563589252014-01-26 2014-01-26T10:03:20 DC 14002 2 5.50
2 563589272014-01-26 2014-01-26T10:03:34 DC 14002 3 3.30
我想删除所有包含'DC'和'14003'的行。
我正在尝试使用sed
var1="DC"
var2="14003"
sed -i /$var1/$var2/d /path/file
但它不起作用。有人可以帮忙吗?
答案 0 :(得分:2)
sed '/14003/{/DC/d}'
这样做:
删除所有包含“DC”和“14003”的行。
如果你使用sed和shell变量,请使用双引号:
sed "...$FOO...$BAR.."
答案 1 :(得分:0)
你可以使用awk
,这很简单:
$ awk '$5 != 14003 && $4~/DC/' file
2 563589252014-01-26 2014-01-26T10:03:20 DC 14002 2 5.50
2 563589272014-01-26 2014-01-26T10:03:34 DC 14002 3 3.30
要更新文件,您必须将输出重定向到新文件。然后,您可以使用mv
:
awk '$5 != 14003 && $4~/DC/' file > new_file && mv new_file file
答案 2 :(得分:0)
使用awk
awk '!/DC/ || !/14003/' file
2 563589252014-01-26 2014-01-26T10:03:20 DC 14002 2 5.50
2 563589272014-01-26 2014-01-26T10:03:34 DC 14002 3 3.30
使用变量:
var1="DC"
var2="14003"
awk '$0!~v1 || $0!~v2' v1="$var1" v2="$var2" file
2 563589252014-01-26 2014-01-26T10:03:20 DC 14002 2 5.50
2 563589272014-01-26 2014-01-26T10:03:34 DC 14002 3 3.30
答案 3 :(得分:0)
您可以使用perl:
perl -i -lne 'print unless(/DC/ and /14003/)' your_file
注意:这将替换现场。
如果您希望将其包含在shell脚本中,则可以使用以下方法:
#!/bin/ksh
one="DC"
two="14003"
three=`perl -i -lne "print unless(/$one/ and /$two/)" temp`