でエスケープすべき有効なパターン、だことを確認する必要がありますので、あなたのecho "$line"
利回り
line="Some Text that should be changed \\"
:
Some Text that should be changed \
次にsed
が表示されます。
sed -i "s/Some Text that should be changed \/Your replacement/" yourfile
とバックスラッシュは、検索パターンが終了していないため、代替コマンドが不正であることを意味します。エラーメッセージに示されています。
文字列の最後に2つ目のバックスラッシュを付ける必要があります。それをやって無数の方法の一つは次のとおりです。
case "$line" in
(*\\) line="$line\\";;
esac
これは単に本発明の中である...しかし、それは、文字列を修正するための任意の外部コマンドを実行していないというメリットがあります。 bash
にはより多くの直接的な置換もあります。
sed -i "s/^$line$/$newline/" $myFile
をしている限り$newline
は、任意のスラッシュもバックスラッシュも含まないように、あなたは十分に安全になります。
今、あなたは行うことができます。
'$ line'には何がありますか? '$ newline'には何がありますか?単一のバックスラッシュと一致するようにバックスラッシュの発生を倍増させます。 –
'$ line'と' $ newline'とは何ですか(それらをエコーして私たちに知らせますか?) –
もちろん$ lineは "変更すべきテキスト"と$ newlineは新しい行です。その行の代わりに書き込みたい –