1. ホーム
  2. sed

[解決済み】sedが "unknown option to `s'"エラーで失敗しました【終了しました

2022-02-20 01:04:20

質問

を使おうとしています。

sed -i -e "s/.*seb.*/    \"$ftp_login_template\"/" $ftp_dir

が、このようなエラーが発生します。

sed: -e expression #1, char 34: unknown option to `s'

これは完全に動作するので、なぜか理解できません。

sed -i -e "s/.*wbspassword.*/    \"wbspassword\": \"$password\",/" $user_conf

何が間違っているのか、何か思い当たることはありますか?

これが問題なのでしょうか? ftp_login_template=\${user}:${password}:24:86::\/var\/lib\/clit.${user}\/downloads:\/bin\/false\"

解決方法は?

問題はスラッシュで、変数にスラッシュが含まれていると、最終的なコマンドは次のようになります。 sed "s/string/path/to/something/g" スラッシュが多すぎる。

以来 sed は任意の文字を区切り文字として使うことができるので (新しい区切り文字を宣言する必要はありません)、置換文字列に現れない別の文字を使ってみることができます。

replacement="/my/path"
sed --expression "s@pattern@$replacement@"

ただし、これは確実なものではありません。 @ のようなバックスラッシュの並びがあると、同じ理由で壊れます。 \1 に従って解釈されます。 sed のルールに従います。使用方法 | と似ていて読みやすいので、デリミタとして使用することもできます。 / .