linux - 使用 sed 从 XML 中删除属性

首先,可能还有其他(更好的)选项,但在这种情况下我必须使用 awk 的 sed。 我有一个包含以下内容的 XML 文件。

<Field name="field1" type="String">AAAA</Field>
<Field name="field2" type="Integer">0</Field>
<Field name="field4" type="String">BBBB</Field>

这里我想用sed修改内容,得到如下结果:

<field1>AAAA</field1>
<field2>0</field2>
<field4>BBBB</field4>

所以删除 "*Field name="*" ,名称的最后引号和其余属性,直到 *>*我还想更改最后一个 </Field>与实际的字段名称。 如何接近 awksed

从第一个标签中删除适用于

sed 's/ type=".*"//' 
and
sed 's/Field name="//' 

我不确定如何继续更换最后一个。

最佳答案

使用sed

$ sed -E 's~[A-Z][^"]*"([^"]*)[^>]*([^/]*/)[^>]*~\1\2\1~' input_file
<field1>AAAA</field1>
<field2>0</field2>
<field4>BBBB</field4>

https://stackoverflow.com/questions/73824156/

相关文章:

typescript - 为什么 `type T1 = undefined & {}` 从不出现在

c++ - 如何在始终选择第一个元素并过滤其余元素的范围内创建 View ?

haskell - 我可以在 Haskell 中将数字全局限制为只有 3 位小数吗?

c++ - 我可以继承 std::array 并重载 operator [] 吗?

regex - 包含至少两个数字/字母的序列的 Python 正则表达式

rust - -1 和 pow 的特殊行为

r - 识别/描述向量中具有特定值的连续几天的序列

performance - 我可以使此 Clojure 代码(计算图形二分法)更高效吗?

go - 在读取和修改之前锁定 slice

linux - 从日志文件中提取最近 24 小时的数据