5

bash スクリプトを使用して最小化しようとしている xml ファイルがあります。

インデントを削除すると、ファイルの一部は次のようになります。

<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 ファイルで可能なすべてのものを網羅するにはほど遠いものです)。含む)

別の方法として、 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
于 2013-06-06T16:19:00.643 に答える