2011-08-11 12 views
1

私が付いたファイルがあります:sed - 連続して1つ以上のスペースを削除するにはどうすればよいですか?

STRING.STRING2.STRING3   = VALUE1 bla bla text bla bla 

を、私はこのような何かを取得したい:のgrepまたはのような唯一のシェルコマンドを使用して

<string name="STRING.STRING2.STRING3">VALUE1 bla bla text bla bla</string> 

など

までをsedの今私はそれに達した:

TEMP=`cat $file | 
     sed '/^\#/d' $file  
     sed '[email protected][email protected]">@'     
     sed '[email protected]\[email protected][email protected]'    
     sed 's:(\\s){3}::g'`     

echo "$TEMP " | sed '[email protected]^@<string name="@' | 
     sed '[email protected][email protected]</string>@' 

(あまりうまくも第五doesntの仕事...)

答えて

2

あなたbashを使用している場合である

awk -F= '{gsub(/[[:space:]]*/,"",$1); gsub(/^[[:space:]]*/,"",$2); print "<string name=\""$1"\">"$2"</string>"}' test.txt 

、することができますシェル内で完全に実行してください。

str="STRING.STRING2.STRING3   = VALUE1 bla bla text bla bla" 
shopt -s extglob 
IFS="+()=+()" 
read v1 v2 <<< "$str" 
printf '<string name="%s">%s</string>\n' "$v1" "$v2" 

<string name="STRING.STRING2.STRING3">VALUE1 bla bla text bla bla</string> 

編集生成:すごい

shopt -s extglob 
while IFS="+()=+()" read v1 v2; do 
    printf '<string name="%s">%s</string>\n' "$v1" "$v2" 
done < filename 
+0

スーパー!!しかし、どのように私はこれを変更することができます各行形式のファイル名を行うには? –

+0

@Buda、更新私の答え –

+0

うわー!奇妙な問題:同じ厄介な問題は、最初のバージョンの回答が良い出力を生み出す一方で、編集された答え(2番目)は「=」の前のすべてのスペースを含んでいます。 –

1

のような何か:TEXT.TXTはあなたのファイル

+0

にファイルを処理するために! almoust完璧!それでもまだ多くのスペースがあります: が改ざんされました。 KEYの後にスペースを抽出できますか? –

1
sed -r 's/^([^ ]+) *= *(.+)$/<string name="\1">\2<\/string>/' < file 
+0

私はスペースに関してあまり厳密ではないでしょうから、パターンとして ''/^([^] +)* = *(。+)$/ \ 2 <\/string>/。 – arnep

+0

@arnep合意しましたが、それはデータに依存します – hdima

+0

信じられないほどの完璧!速くても!!ここから私は管理することができると思う..あなたタンク! –

関連する問題