![在每个 XML 标记后添加换行符](https://linux22.com/image/1251278/%E5%9C%A8%E6%AF%8F%E4%B8%AA%20XML%20%E6%A0%87%E8%AE%B0%E5%90%8E%E6%B7%BB%E5%8A%A0%E6%8D%A2%E8%A1%8C%E7%AC%A6.png)
我的 xml 文件如下所示:
<price = "2.22"><instock = "1">
我需要这样:
<price = "2.22">
<instock = "1">
我需要在每个“>”字符后用 awk 或 sed 添加一个换行符。我该怎么做?谢谢
答案1
正如 KeithB 所说,使用粗暴的方法可能会出现一些问题。但是,这种粗暴的方法选择性更强,因此失败的几率会降低约 0.00001%,这可能就足够了。
sed 's|><|>\n<|g' inputfile
如果尖括号之间可能有空格,那么这样做可能会更好:
sed 's|>[[:space:]]*<|>\n<|g' inputfile
这将消除该空白。
答案2
如果要正确执行此操作,您需要比 awk 更强大的工具。其中一个问题是 awk 无法处理>
内部字符串或注释。您可能更适合使用 perl 或 python。如果这只是为了使文件更容易查看,那么它可能没问题。
一个快速而粗糙的 awk 脚本是
awk '{for(i=1; i<= NF-1; i++) printf "%s>\n",$i}' FS='>'
这会将其>
视为字段之间的分隔符,并在各自的行上打印出每个字段。这很粗糙,但可能是一个起点。