sedコマンドを使用して、特定の単語を含む行の一重引用符内の値を置き換えます。

sedコマンドを使用して、特定の単語を含む行の一重引用符内の値を置き換えます。

以下のように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行のsed2つの単一引用符の間の値を変更するためにコマンドを変更したいと思います。,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

関連情報