如何使用 args 和 echo 命令转义 sed 命令中的双引号?
How can I escape double quotes in sed command using args and echo command?
我正在编写一个 bash 脚本,试图在文件中找到一个正则表达式,用这个数字除以 2 替换(用 sed)对应于浮点数的正则表达式的一部分。
示例:
echo set NEX \"2.00\" > testfile
cat testfile
输出:
set NEX "2.00"
命令:
sed -i -r 's/(set NEX ")([0-9.]+)(")/echo $(echo "scale=2;\/2" | bc)/e' testfile
cat testfile
输出:
set NEX 1.00
所以,我的问题是 sed 命令中的 echo 似乎没有转义和解释 \1 和 \3 返回的双引号。我尝试了许多转义技巧,例如使用 \ 或 '"'"' 但它仍然不起作用。
我很乐意得到一些帮助并了解更多关于 bash 的信息,我在 shell 的学习远远落后于我:)
提前致谢!
zet
因为 sed e
命令调用 shell,它解释掉引号,最简单的方法是在后续 sed 命令中简单地替换引号:
sed -r '/set NEX/{s/(set NEX ")([0-9.]+)(")/echo $(echo "scale=2;\/2" | bc)/e;s/\b[0-9.]+\b/"&"/}' testfile
上面在您的命令周围添加 /set NEX/{}
,然后在其后添加 s/\b[0-9.]+\b/"&"/
以将浮点数括在双引号中。
Perl 在这里可能更直接,但实际上并不多:
perl -pe 's#\b([.0-9]+)\b#sprintf "%3.2f",/2.0#e if /set NEX/' testfile
Perl 不会丢失双引号,只是修改 s###e
中的浮点数
这可能适合您 (GNU sed):
sed -E 's/(set Nex)"([0-9]+)"/echo \"$(echo "scale=2;\/2"|bc)\"/e' file
要使 "
在回显时成为文字,必须对 \"
进行转义。然后必须通过替换 \"
.
的 e
标志对 echo 命令的评估进行转义
我正在编写一个 bash 脚本,试图在文件中找到一个正则表达式,用这个数字除以 2 替换(用 sed)对应于浮点数的正则表达式的一部分。
示例:
echo set NEX \"2.00\" > testfile
cat testfile
输出:
set NEX "2.00"
命令:
sed -i -r 's/(set NEX ")([0-9.]+)(")/echo $(echo "scale=2;\/2" | bc)/e' testfile
cat testfile
输出:
set NEX 1.00
所以,我的问题是 sed 命令中的 echo 似乎没有转义和解释 \1 和 \3 返回的双引号。我尝试了许多转义技巧,例如使用 \ 或 '"'"' 但它仍然不起作用。 我很乐意得到一些帮助并了解更多关于 bash 的信息,我在 shell 的学习远远落后于我:)
提前致谢!
zet
因为 sed e
命令调用 shell,它解释掉引号,最简单的方法是在后续 sed 命令中简单地替换引号:
sed -r '/set NEX/{s/(set NEX ")([0-9.]+)(")/echo $(echo "scale=2;\/2" | bc)/e;s/\b[0-9.]+\b/"&"/}' testfile
上面在您的命令周围添加 /set NEX/{}
,然后在其后添加 s/\b[0-9.]+\b/"&"/
以将浮点数括在双引号中。
Perl 在这里可能更直接,但实际上并不多:
perl -pe 's#\b([.0-9]+)\b#sprintf "%3.2f",/2.0#e if /set NEX/' testfile
Perl 不会丢失双引号,只是修改 s###e
这可能适合您 (GNU sed):
sed -E 's/(set Nex)"([0-9]+)"/echo \"$(echo "scale=2;\/2"|bc)\"/e' file
要使 "
在回显时成为文字,必须对 \"
进行转义。然后必须通过替换 \"
.
e
标志对 echo 命令的评估进行转义