sed シャットダウンの問題

sed シャットダウンの問題

sedスクリプトには、次のように更新する必要がある次の行がありますsed

opennic="nameserver 95.85.9.86\nnameserver 185.83.217.248\nnameserver 193.183.98.154\nnameserver 5.9.49.12"

コマンドsedは次のとおりです。

sed -i.bak s/^opennic=\".*\"/opennic=\"${u}\"/g /absolute/path/to/script.sh

そして$u

nameserver 104.238.153.178\\nnameserver 141.138.157.53\\nnameserver 45.63.91.109\\n

私が受け取ったエラーメッセージは次のとおりです。

sed: -e expression #1, char 35: unterminated `s' command

のエスケープ文字に問題があるようですが、$u正確にはわかりません。

会社にどうやって行きますかsed

答え1

sedコマンドに二重引用符を使用する必要があります。

$ sed -i.bak "s/^opennic=\".*\"/opennic=\"${u}\"/g" /absolute/path/to/script.sh

引用符がない場合、sed は複数の引数で実行されます。$u変数をスペースで複数のパラメータに分割します。

次のようになります(各行は異なるパラメータです)。

$ sed \
  's/^opennic=".*"/opennic="nameserver' \
  '104.238.153.178\\nnameserver' \
  [...]`

ここで、最初のs/^[...]コマンドは未完了のままです。

関連情報