1. ホーム
  2. shell

[解決済み] sed が正規表現で終端がない代用品でエラーになる

2022-02-16 03:53:38

質問

あるファイルで文字列 "x.x.x.x" を代入し、その結果を別のファイルに出力しようとしているのですが、どうすればよいですか?正規表現で終端がない代入というエラーが出ます。

以下はそのコードです。

sed 's/x.x.x.x/'$bigip_management_ip'/g' temp.tt >> variables.tf
sed: 1: "s/x.x.x.x/": unterminated substitute in regular expression

echo $bigip_management_ip

54.83.174.153

shitole$ cat temp.tt

variable "bigip_management_ip" {
  default = "x.x.x.x"
}

解決方法は?

あなたの問題に対応するMCVEはこちらです。

bigip_management_ip=" 54.83.174.153"
sed 's/x.x.x.x/'$bigip_management_ip'/g'

macOSで実行すると、以下のようになります。

sed: 1: "s/x.x.x.x/": unterminated substitute in regular expression

問題は、変数の先頭のスペースが、引用符で囲まれていないために単語の分割を引き起こしていることです。ShellCheckはこの点について警告を発します。

In /Users/myuser/myscript line 2:
    sed 's/x.x.x.x/'$bigip_management_ip'/g'
                    ^-- SC2086: Double quote to prevent globbing and word splitting.

変数はよっぽどのことがない限り、常に引用符で囲んでおくべきです。

sed "s/x.x.x.x/$bigip_management_ip/g"