2012-02-20 9 views
82

私はsedの - `sの不明なオプション

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\"

+6

* BSDのエラーメッセージ(OSXを含む)は、 "代替コマンドの悪いフラグ"です - これをややグーグルにするためにここに含めてください。 – tripleee

答えて

201

スラッシュに問題があります:変数にはそれらが含まれており、最後のコマンドはスラッシュが多すぎるsed "s/string/path/to/something/g"のようなものです。置換文字列が後で含まれている場合:これは弾丸の証拠ではないことを

replacement="/my/path" 
sed -e "[email protected]@[email protected]" 

注:sedは区切り文字として任意の文字を取ることができますので

、あなたの置換文字列に表示されていない別のものを使用して試すことができます@同じ理由で破損し、\1のようなバックスラッシュシーケンスはsedの規則に従って解釈されます。

+26

この回答を参考にして、将来のユーザーを助けるためのメモです。元のポスターは、スラッシュを含む置換(ほとんどの場合、変数に隠れている可能性が高い)に何かを持っていた可能性があります。これらのスラッシュの最初のものに遭遇した後、sedは置換が終了したことと、オプションとして次に来るもの( 'g'など)を考慮しました。 –

+0

ああ、10回見た後、スラッシュが見えます。だから私はそれをどのように修正するのですか? – ppumkin

+3

うまくいっています(変数式を '' '' '' 'で囲むのを忘れないでください。そうでなければ' $ content'の内容ではなく最終結果に '$ content'をたくさん載せます:)) –

関連する問題