以下のようにHTMLファイルに1行あります。
shahar.push(['remoteUrl', 'staging.zazzercode.com']);
remoteUrl
環境に応じて値をコマンドに変更したいと思いますsed
。
例えば、
shahar.push(['remoteUrl', 'staging.zazzercode.com']);
shahar.push(['remoteUrl', 'production.zazzercode.com']);
使った
sed -i '/remoteUrl/c\shahar.push(['remoteUrl','staging.zazzercode.com']);' predict.html
動作しますが、単一引用符を削除し、'remoteUrl'
HTML'staging.zazzercode.com'
エラーが発生します。
shahar.push([remoteUrl, staging.zazzercode.com]);
だから安全上の理由で1行のsed
2つの単一引用符の間の値を変更するためにコマンドを変更したいと思います。,
remoteUrl
sed
または、行全体を一重引用符で置き換えるには、私が知っているもの以外のオプションを望みます。
答え1
問題は、bash
コマンドラインをマスターする前に処理されていることですsed
。この場合の解決策は、外側の引用符を二重引用符に変更することです。
sed -i "/remoteUrl/c\shahar.push(['remoteUrl','staging.zazzercode.com']);" predict.html
問題は、bash
コマンドを渡す前に引用符を削除することですsed
。 Bashの観点からは、元のコマンドはbash
すべての引用符が削除された一連の一重引用符文字列でした。上記のバージョンでは、bash
一重引用符と二重引用符で囲まれた文字列が表示されます。 Whileはbash
文字列をに渡す前にこれらの二重引用符を削除しますsed
が、内部単一引用符のみを保持します。
答え2
だから安全のために
sed
、1行のコンマ()の後の2つの一重引用符の間の値を変更するためにコマンドを変更したいと思います。,
'remoteUrl'
sed "s/\('remoteUrl',.*'\).*\('\)/\1staging.zazzercode.com\2/"
s
ただ見つけて交換して交換してください。
\(
そして、\)
「古い」文字列(最初に指定)でサブ文字列を識別します。 (\1
そして\2
最大)これらの部分文字列を代替文字列にコピーします。\n
\9