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

説明:

  • /代わりに、以前に持っていた場所を使用_して、一致するパターンと置き換えるパターンを分離します。
  • char\をエスケープするために使用します$
  • bashが何かを自動拡張しないように、二重引用符の代わりに一重引用符を使用します(一重引用符で囲まれた文字列は文字通りに解釈されます)
  • -iオプションを使用sedしてインプレース編集を行うと、一時ファイルを使用する必要がなくなります。
  • ほとんどの場合、変数(など$file)を二重引用符で囲みます。
于 2012-12-10T16:36:01.693 に答える