使用sed在xml文件中有条件地删除行

时间:2015-07-27 16:53:36

标签: xml linux bash sed

这个问题可能没有直接的答案......如果是这样,请不要担心。我有一个类似于

的XML文件
<a>0.00</a>
<b>0.00</b>
<c>0.00</c>
<d>0.00</d>

这是我正在使用的一个愚蠢的版本。我的目标是删除任何数据点为零的行,当且仅当所有数据点都为零时(如上面给出的示例)。即使文件中的一行包含非零条目,我也无法删除它们中的任何一行。例如,如果上面是

<a>0.00</a>
<b>0.00</b>
<c>1.00</c>
<d>0.00</d>

然后该文件应保持不变。最终,我只想删除所有行,如果它们在每个标记中都为零,则保留文件,否则。我知道如果所有行都有零数据输入,则以下内容将起作用。

sed --in-place '\|>0.00</|d' $FILENAME 

但是,如果我有下面的第二个例子,这将留给我

<c>1.00</c>

这不是我正在寻找的东西。我知道我可能需要一个if语句,比如

if (all lines contain the string '>0.00</') then
   sed --in-place '\|>0.00</|d' $FILENAME 
fi

我认为if语句中的条件我不确定。如果所有行包含上面提到的字符串&#34;我将如何说明&#34;?我不一定要使用sed,我过去曾使用过awk,但我最熟悉的是sed ....任何输入或指向正确方向的人都会非常感激。感谢

1 个答案:

答案 0 :(得分:2)

grep -vq ">0.00<" $FILENAME || sed -i '\|>0.00<|d' $FILENAME

执行第二个命令时,只有文件在所有行中都包含0.00。