sed 変数には / が含まれます。

sed 変数には / が含まれます。

次の内容を含むテキストファイルがあります。

some content  
replace content  
other content

次のようないくつかの変数があります。

PATH="/path/to/scriptdir"
PARAMETERS="para1 para2"
FILETOCHANGE="/foo/bar"

次に、次から始まるテキストファイルの内容を変更したいと思います。変える、変数の内容そしてパラメータ。交換後、テキストファイルは次のようになります。

some content
/path/to/scriptdir/script para1 para2
other content

私はいくつかのsedコマンドを試しましたが、エラーが発生し続けます。例えば

sed -i "s/^replace.*$/$PATH/script $PARAMETERS/g" $FILETOCHANGE
sed: -e expression #1, char 12: unknown option to `s'

または

sed -i "s|^replace.*$|$PATH/script $PARAMETERS|g" $FILETOCHANGE
sed: -e expression #1, char 58: unterminated `s' command

何が間違っているのか教えてもらえますか?

ベストアンサー1

(1)するいいえPATHこれには変数を使用します。シェルには特別な意味があります。私はSCRIPTDIRここで選択します:

SCRIPTDIR="/path/to/scriptdir"
PARAMETERS="para1 para2"
FILETOCHANGE="/foo/bar"

/(2)sedの代替コマンドにはスラッシュ()は必要ありません。s#this#that#それ以外の場合、s|this|that|効果は同じですs/this/that/g。 Sedは、s残りの(代替)コマンドの区切り文字に続くs文字のみを使用します。これにより、パターンと置換文字列のスラッシュ関連の問題を回避できます。|たとえば、区切り文字として使用すると、スラッシュはsedに特別な意味がありません。

したがって、次のように動作します。

sed "s%^replace.*$%$SCRIPTDIR/script $PARAMETERS%g" $FILETOCHANGE

おすすめ記事