如何解决如何使用 args 和 echo 命令在 sed 命令中转义双引号?
我正在编写一个 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 的研究远远落后于我:)
先谢谢你!
zet
解决方法
因为 sed e
命令调用解释引号的 shell,所以最简单的方法是简单地替换后续 sed 命令中的引号:
sed -r '/set NEX/{s/(set NEX ")([0-9.]+)(")/echo \1$(echo "scale=2;\2\/2" | bc)\3/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",$1/2.0#e if /set NEX/' testfile
Perl 不会丢失双引号,只会修改 s###e
这可能对你有用(GNU sed):
sed -E 's/(set Nex)"([0-9]+)"/echo \1\\"$(echo "scale=2;\2\/2"|bc)\\"/e' file
要使 "
在回显时为文字,它们必须转义 \"
。然后必须通过替换 e
的 \\"
标志对 echo 命令的评估进行转义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。