2014-01-10 46 views
0

我有一个文件,其中的一部分我正在写入shell脚本中的变量。在这个变量中,我试图通过sed替换部分字符串。但它也以某种方式取代了'换行'。sed:默认取代 n

这里是脚本

#!/bin/bash 

str=$(grep "my_stat" $1) 

str=$(echo $str | sed -e "s/x/\./g") 

echo "$str" 

我str中的grep看起来像这样经过:

mystatx1x2x3 10 
mystatx3x4x5 20 
mystatx4x4x1 100 

但更换 “X” 来后 “”它正在变成这样:

mystats.1.2.3 10 mystat.3.4.5 20 mystat.4.4.1 100 

任何想法为什么它会发生这样的事情?

谢谢。

+0

为什么不说'grep“my_stat”$ 1 |而不是sed's/x/.g''?请注意,您不要在替换字符串中转义'.'。这里使用'-e'是多余的。 – devnull

回答

1

更换

str=$(echo $str | sed -e "s/x/\./g") 

str=$(echo "$str" | sed -e "s/x/\./g") 

而是的grep然后sed,你可能会说

sed -n '/mystat/s/x/\./gp' $1 
+0

工作。为什么“”有所作为? –

+1

无引号,变量'$ str'内的换行符将被视为IFS而不是换行符 – ray

0

做你更换一次拍摄

sed -e '/my_stat/s/x/\./g' file