2011-08-11 24 views
1

我有一个文件:sed - 如何在一行中删除更多的空间?

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

,我想获得这样的事:只使用shell命令

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

的grepsed的和其他

直到现在我达到了:

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>@' 

(也是5 does not工作太清楚......)

回答

2

如果你使用bash,可以完全在壳内完成:

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

哇!奇怪的事情:同样恼人的问题,而第一个版本的答案产生良好的输出,编辑答案(第二个)包括“=”之前的所有空格。Whi发生了什么? –

1

喜欢的东西:

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

的text.txt哪里是你的文件

+0

哇!!! almoust完美!但它仍然给我很多空间: 已被篡改。 你可以提取KEY后的空格吗? –

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

我对空格不会太严格,所以我会使用's/^([^] +)* = *(。+)$/ \ 2 <\/string> /'作为模式。 – arnep

+0

@arnep同意,但这取决于数据 – hdima

+0

令人难以置信的完美!也快!从这里我想我可以管理..坦克你! –