sed 文字列を特殊文字で検索して置換する

sed 文字列を特殊文字で検索して置換する

交換しようとしています

window.location = '/loft-run'+ResourceManager.hotlegs + mainPage + ".html#" + newhash;

到着

window.location = ResourceManager.hotlegs + mainPage + ".html#" + newhash;

ファイルから。私は何を試しましたか?

sed -i 's~/loft-run'+ResourceManager.hotlegs + mainPage + ".html#" + newhash"~ResourceManager.hotlegs + mainPage + ".html#" + newhash"' Warmblanket.js

私はいくつかのsedコマンドを試しましたが、あまり役に立ちませんでした。あなたの提案は大きな助けになります。

答え1

このように:

sed -i "s@'/loft-run'\+@@" warmblanket.js
  • 代替の基本形態はs/before/after/
  • 使用二重引用符治療したい場合アポストロフィ
  • @ここでデフォルトではなく区切り文字を選択/すると、ほとんどのASCIIテーブルを選択できます。

答え2

sedはリテラル文字列については知らず、正規表現と逆参照が有効になっているテキストだけがわかりません。リテラル文字列を操作するには、awkなどの文字列を理解するツールを使用します。

$ cat file
window.location = '/loft-run'+ResourceManager.hotlegs + mainPage + ".html#" + newhash;

$ awk \
    -v old="window.location = '/loft-run'+ResourceManager.hotlegs + mainPage + \".html#\" + newhash;" \
    -v new='window.location = ResourceManager.hotlegs + mainPage + ".html#" + newhash;' \
    's=index($0,old) { $0=substr($0,1,s-1) new substr($0,s+length(old)) } 1' file
window.location = ResourceManager.hotlegs + mainPage + ".html#" + newhash;

"文字列にsが含まれており、シェルが--delimited文字列でsを受け入れないため、代わりに文字列の周りを使用します。'old=...'''

関連情報