
Bashスクリプトがあります。 Bashスクリプトで名前を変更したいですmaster02
。$machine_master
value=master02_up
#master02
http://master02.$domain:8080
変更方法はmaster02
後でのみ $machine_master
可能です。master02
http://master02
予想出力:
value=master02_up
#master02
http://$machine_master.$domain:8080
答え1
使用標準sed
:
sed 's#http://master02.\$domain:8080#http://$machine_master.$domain:8080#' file >newfile
これにより、正しい文字列が変更され、http://master02.$domain:8080
結果http://$machine_master.$domain:8080
が新しいファイルに書き込まれます。
inは、「行末」パターンとして解釈されないようにエスケープする必要があります$
。代替テキストはパターンではないため、エスケープする必要はありません$domain
。$
パターンと置換テキストの両方にデフォルトの区切り文字が含まれているため、置換コマンド()#
で区切り文字を使用しています。sed
s
/
このコマンドは、次のように短縮することもできます。
sed 's#http://master02#http://$machine_master#' file >newfile
安全かどうか(ファイルの内容と置き換えたいテキストインスタンスによって異なります)。
テスト:
$ cat file
value=master02_up
#master02
http://master02.$domain:8080
$ sed 's#http://master02.\$domain:8080#http://$machine_master.$domain:8080#' file >newfile
$ cat newfile
value=master02_up
#master02
http://$machine_master.$domain:8080