Linux CLI 更改价格(awk 还是 sed?)

Linux CLI change price (awk or sed?)

我将价格字符串格式化为 .00 在各种 html 文件中。我想使用 Linux 命令行(BASH,大概是使用 awk 或 sed)将每个价格提高一定的金额(在本例中为 3 美元)。

简而言之,我需要找到 $nn.00 并将其替换为 $(n+3)n.00

开始拼起来不知道怎么加3sed -r 's/([^$][0-9][0-9][.]00). ????' file.html

谢谢!

示例数据:

$ cat prices_file.html
<p>.00</p><p>.00</p>
<p>.00</p>
<p>1.00</p>

Perl 解决方案:

$ perl -pi.bak -e 's/$(\d+\.\d+)/sprintf("$%.2f",  + 3)/eg' prices_file.html

之后:

$ cat prices_file.html
<p>.00</p><p>.00</p>
<p>.00</p>
<p>4.00</p>

以上示例是最常见的带替换的 perl 用例之一。 它还会备份您的原始文件(在 prices_file.html.bak 中),以防您对其进行不必要的操作。

可能不太常见的是求值修饰符 (s///e),它允许您在替换中执行任意 perl 代码。 全局修饰符 (s///g) 告诉 perl 替换所有出现的地方(这里是在行的上下文中,如果你删除 g 修饰符 if 只会替换给定样本数据第一行中的第一个价格)。

sprintf("$%.2f", + 3)替换中,</code>指匹配组[<code>(\d+\.\d+)].