Bash - 如何删除等号周围的任何空格

时间:2013-06-06 15:55:07

标签: bash

我有一个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 个答案:

答案 0 :(得分:6)

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

此致

答案 1 :(得分:2)

这应该有效

sed 's/\s*=\s*/=/g' inputFile

答案 2 :(得分:1)

使用tr

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

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

答案 3 :(得分:0)

首先应该尝试查看xmllint --format是否还没有完成所需的一切:

xmllint --format OLDFILE.xml > NEWFILE.xml

这种方法的最大优点是:

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

另一种方式,如果你确定name =“value”各自独立:

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