2012-12-10 77 views
1

我试图在$HOME/findreplace/目录中的所有文件中用以下语句替换字符串#########$,但我得到sed: Function s_#########_ cannot be parsed.错误。

在此先感谢您的帮助。

for file in $HOME/findreplace/*.* 
do 
    sed -e "s_#########_$_g" $file> /tmp/tempfile.tmp 
    mv /tmp/tempfile.tmp $file 
    echo "Modified: " $file 
done 

回答

2

你可以这样做:

for file in $HOME/findreplace/*.* 
do 
    sed -i 's/#########/\$/g' "$file" 
    echo "Modified: $file" 
done 

说明:

  • 使用/,而不是在那里你必须_之前匹配的模式和模式,以取代分离。
  • 使用\逃脱$焦炭
  • 使用单引号代替双引号,以避免bash的自动展开的东西(字符串用单引号将字面解释)
  • 使用-i选项sed做就地编辑,因此您可以避免使用临时文件。
  • 你几乎总是想用双引号括起你的变量(如$file)。
+0

感谢它的工作像一个魅力 –