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
4

1 回答 1

2

你可以做:

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

解释:

  • /改为使用_之前的位置来分隔要匹配的模式和要替换的模式。
  • 用于\转义$字符
  • 使用单引号而不是双引号来避免 bash 自动扩展某些内容(单引号括起来的字符串将按字面意思解释)
  • 使用该-i选项进行sed就地编辑,这样您就可以避免使用临时文件。
  • 您几乎总是希望将变量(例如$file)括在双引号中。
于 2012-12-10T16:36:01.693 回答