5

我有一个 xml 文件,我正在尝试使用 bash 脚本将其最小化。

删除任何缩进后,文件的某些部分如下所示:

<layer name       ="dotted_line"
align      ="topleft"
edge       ="topleft"
handcursor ="false"
keep       ="true"
url        ="%SWFPATH%/include/info_btn/dotted_line.png"
zorder     ="15"
/>

我想删除等号前后的所有空格,所以它看起来像:

<layer name="dotted_line"
align="topleft"
edge="topleft"
handcursor="false"
keep="true"
url="%SWFPATH%/include/info_btn/dotted_line.png"
zorder="15"
/>

任何想法如何实现这一目标?

谢谢

4

4 回答 4

6

sed -i s/\ *=\ */=/g filename

问候

于 2013-06-06T15:58:10.360 回答
2

这应该工作

sed 's/\s*=\s*/=/g' inputFile
于 2013-06-06T15:56:52.213 回答
1

您应该首先尝试查看 xmllint --format 是否还没有完成您需要的所有操作:

xmllint --format OLDFILE.xml > NEWFILE.xml

这种方法的一大优势:

  • 它将剥离所有“化妆品”的东西(额外的空间等)。即,它不仅会替换name = value为,name=value而且会去掉许多其他额外的空格,并且“整齐地”和简洁地缩进。
  • 它知道 XML,因此使用起来比任何基于正则表达式的东西更安全(你不能用正则表达式解析每个 xml 文件!它适用于基本的 xml 结构,但远没有包含 XML 文件可以的所有东西包含)

另一种方式,如果您确定名称 =“值” 各自单独在自己的行上:

export _tab_="$(printf '\011')"
sed -e "s/^[ ${_tab_}]*[a-zA-Z0-9_-]\([a-zA-Z0-9_-]*\)[ ${_tab_}][ ${_tab_}]*=[ ${_tab_}][ ${_tab_}]*/\1=/"  OLDFILE.xml > NEWFILE.xml
于 2013-06-06T16:19:00.643 回答
1

使用tr

$ echo 'hello there' | tr -d "[:space:]"
hellothere
$

当然,这会丢弃文件中的所有空格,这可能有点太多了。

于 2013-06-06T15:58:42.063 回答