2015-04-25 35 views
2

我的價格字符串格式爲 $25.00 在各種html文件中。我想使用Linux命令行(BASH,大概是用awk或sed)將每個價格增加一定的金額(在這種情況下爲$ 3)。Linux CLI更改價格(awk或sed?)

總之,我需要找到$ nn.00與$(N + 3)n.00更換

開始把它在一起,但我不知道怎麼加3 sed -r 's/([^$][0-9][0-9][.]00). ????' file.html

謝謝!

回答

3

樣本數據:

$ cat prices_file.html 
<p>$25.00</p><p>$78.00</p> 
<p>$2.00</p> 
<p>$101.00</p> 

解的Perl:

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

後:

$ cat prices_file.html 
<p>$28.00</p><p>$81.00</p> 
<p>$5.00</p> 
<p>$104.00</p> 

上面的例子是最常見的perl用例取代之一。 它也會備份你的原始文件(在prices_file.html.bak),以防你做一些不需要的東西。

評估修飾符(s///e)可能並不常見,它允許您在替換中執行任意perl代碼。 全局修飾符(s///g)告訴perl替換所有的事件(這裏是在行的上下文中,如果刪除g修飾符,如果只會替換給定示例數據的第一行中的第一個價格)。

sprintf("\$%.2f", $1 + 3)替換,$1是指匹配組[(\d+\.\d+)]。

+0

完美,謝謝!我非常欣賞詳細的解釋和獎金文件備份功能。 – webmonkey