0

私と友人はプロジェクトに取り組んでおり、ファイルに入ることができるスクリプトを作成し、Sed を使用して特定の表現/単語/文字の出現をすべて別のものに置き換える必要があります。これらすべての発生を置き換える複数のテストを通過するように設計されており、それらがどうなるかわからないため、何かを予測する必要があります. ループを使用して別のファイルで「l*」を「L」に置き換える必要がある特定のテストで問題が発生しています。私が持っているコードは

#!/bin/sh
p1="$1"

shift

p2="$1"

shift

for file in "$@" #for any file in the directory
do
   # A="$1"

    #echo $A
    #B="$2"
    echo "$p1" | sed -e 's/\([*.[^$]\)/\\\1/g' > temporary #treat all special characters as plain text
    A="`cat 'temporary'`"
    rm temporary
    echo "$p1"
    echo "$file"
    sed "s/$p1/$p2/g" "$file" > myFile.txt.updated #replace occurances 
    mv myFile.txt.updated "$file"
    cat "$file"
done

さまざまな単語と「l*」を含む練習ファイルでこれをテストしようとしましたが、テストするたびに、ファイル内のすべてのテキストが削除されます。誰かがこれを手伝ってくれませんか。すぐにやりたいと思います。ありがとう

4

1 に答える 1

2

すべての特殊文字がエスケープさAれた のバージョンに設定しようとしているようです。p1ただし、p1後で代わりに使用しますA。変数を使用してみてくださいA。また、一時ファイルなしで設定してみてください。

A=$( echo "$p1" | sed -e 's/\([*.[^$]\)/\\\1/g' )
于 2012-08-14T20:04:07.193 に答える