如何让 sed 包含变量中包含的双 \\
How to get sed to include a double \\ that's included in a variable
我正在 bash 中编写一个脚本,它对我们将调用 storage.config 的文件执行简单的转换。
参数从我们的自动化系统 (VCAC\AppD) 传递到我们的动作脚本,该脚本使用 sed 执行转换。
为简单起见,我将使用以下示例
storage.config - 待改造
url=jdbc:sqlserver://@myDB
转换脚本
myDB='serverxyz\instance'
sed -i -e "s,@myDB,$myDB,g" storage.config
我希望结果 storage.config 看起来像这样;
url=jdbc:sqlserver://serverxyz\instance
然而,它看起来像这样;
url=jdbc:sqlserver://serverxyz\instance
我已经通读了本网站以及其他网站上的答案。并且找到了很多关于如何包含变量、单引号和双引号的有用信息,但没有关于如何在变量中保留双引号的信息。我想让 sed 正确解释,而不是键入类似;
myDB='serverxyz\\instance'
该值将由解决方案工程师输入,他们可能会输入不当,因为他们无法将其识别为有效的 SQL 实例。
sed
解释正确。
您将 \
作为文字字符串粘贴在替换中。
sed
不知道它是来自其他地方的变量,而不是手动输入的。
转义是答案。
如果你愿意,你可以在扩展时使用 ${myDB//\/\\}
来完成。
此外,正如@abesto 在他的回答中非常正确地指出的那样,您甚至在 sed
看到它之前就失去了双斜线。在您的作业中使用单引号来保留它。
myDB='server\instance'
双 \
甚至没有达到 sed 的程度。您的 shell 看到 \
,并将其读作 "oh, you want a \
, because you escaped it"。您可以这样尝试:
myDB="serverxyz\instance"
echo "$myDB"
# output: serverxyz\instance
总而言之(感谢所有回复者。特别感谢@Etan);
myDB='serverxyz\instance'
sed -i -e "s,@myDB,${myDB//\/\\},g" storage.config
以上代码生成了我的 storage.config 文件的正确 translation\transform。结果storage.config如下;
url=jdbc:sqlserver://serverxyz\instance
我正在 bash 中编写一个脚本,它对我们将调用 storage.config 的文件执行简单的转换。
参数从我们的自动化系统 (VCAC\AppD) 传递到我们的动作脚本,该脚本使用 sed 执行转换。
为简单起见,我将使用以下示例
storage.config - 待改造
url=jdbc:sqlserver://@myDB
转换脚本
myDB='serverxyz\instance'
sed -i -e "s,@myDB,$myDB,g" storage.config
我希望结果 storage.config 看起来像这样;
url=jdbc:sqlserver://serverxyz\instance
然而,它看起来像这样;
url=jdbc:sqlserver://serverxyz\instance
我已经通读了本网站以及其他网站上的答案。并且找到了很多关于如何包含变量、单引号和双引号的有用信息,但没有关于如何在变量中保留双引号的信息。我想让 sed 正确解释,而不是键入类似;
myDB='serverxyz\\instance'
该值将由解决方案工程师输入,他们可能会输入不当,因为他们无法将其识别为有效的 SQL 实例。
sed
解释正确。
您将 \
作为文字字符串粘贴在替换中。
sed
不知道它是来自其他地方的变量,而不是手动输入的。
转义是答案。
如果你愿意,你可以在扩展时使用 ${myDB//\/\\}
来完成。
此外,正如@abesto 在他的回答中非常正确地指出的那样,您甚至在 sed
看到它之前就失去了双斜线。在您的作业中使用单引号来保留它。
myDB='server\instance'
双 \
甚至没有达到 sed 的程度。您的 shell 看到 \
,并将其读作 "oh, you want a \
, because you escaped it"。您可以这样尝试:
myDB="serverxyz\instance"
echo "$myDB"
# output: serverxyz\instance
总而言之(感谢所有回复者。特别感谢@Etan);
myDB='serverxyz\instance'
sed -i -e "s,@myDB,${myDB//\/\\},g" storage.config
以上代码生成了我的 storage.config 文件的正确 translation\transform。结果storage.config如下;
url=jdbc:sqlserver://serverxyz\instance