我有
#!/usr/bin/bash
search="ldo_vrf18 {"
replace="$search"' compatible = "regulator-fixed";
regulator-name = "vrf18";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-enable-ramp-delay = <120>;'
sed -i "s/$search/$replace/g" output.file
结果是
sed: -e expression #1, char 62: unterminated `s' command
我怀疑某些值没有在replace
. 有办法逃脱他们吗?我尝试过sed -i 's/'"$search"'/'"$replace"'/g' output.file
,结果相同
问题在于
$replace
变量中的换行符,这些换行符被解释为sed
命令结束。为了在 GNU 中解决这个问题
sed
,您需要$replace
用文字替换变量中的新行\n
:注意:上述解决方案并不适用于所有
sed
实现,因为它是某些版本中的扩展功能(例如,在 GNU 中sed
)。根据POSIX 标准:因此,在 POSIX 上
sed
,文字\n
将失去换行符的含义,并被视为文字n
字符。对于适用于所有sed
实现的可移植解决方案,请在实际换行符前面加上反斜杠:+除了反斜杠后跟数字: