【发布时间】:2021-07-22 06:16:10
【问题描述】:
我正在编写一个 bash 脚本,试图在文件中找到一个正则表达式,用 sed 替换(用 sed)对应于浮点数的正则表达式的一部分除以这个数字除以 2。
例子:
echo set NEX \"2.00\" > testfile
cat testfile
输出:
set NEX "2.00"
命令:
sed -i -r 's/(set NEX ")([0-9.]+)(")/echo \1$(echo "scale=2;\2\/2" | bc)\3/e' testfile
cat testfile
输出:
set NEX 1.00
所以,我的问题是 sed 命令中的 echo 似乎没有转义和解释 \1 和 \3 返回的双引号。我尝试了许多转义技巧,例如使用 \ 或 '"'"' 但它仍然不起作用。 我很乐意得到一些帮助并了解更多关于 bash 的知识,我在 shell 方面的学习远远落后于我 :)
提前谢谢你!
泽特
【问题讨论】:
-
the double quote returned by \1 and \3当你写 在你的终端 :echo set NEX "$(echo something)"这样做"显示在输出中? -
@KamilCuk,它返回:非法变量名。
-
e正在调用 shell,它将像 shell 一样解释引号。因此,只需添加一个添加引号的 sed 命令。s/\b[.0-9]\+\b/"&"/也许。 -
谢谢,它在某种程度上与
s/[0-9.]+/"&"/一起工作,但问题是我只需要用set NEX "替换文件中的行。顺便说一句,\b代表什么?你为什么要逃避+?无论如何,Tyvm -
附上
/set NEX/{}...我会回答的。
标签: bash shell sed escaping echo