2011-03-31 72 views
1

我有一個問題,可以等於乘以十個數字的問題。第一種方法是:如何使用正則表達式乘以10?

perl -pi -e 's/(\d+)/\1 0/g' myfile.txt 

但是這引入了額外的空間,我不能把\ 10,因爲這樣的組不存在。 我的解決辦法是此變通

perl -pi -e 's/(\d+)/\1\l0/g' myfile.txt 

小寫 0,但我敢肯定有,我是不知道的正確方法。

問候。

回答

8

看你應該使用$1形式,而不是\1在換人。這實際上是其中一個原因:對於變量形式,您可以說${1}0

4

可以使用/e修改:

perl -pi -e 's/(\d+)/$1 * 10/ge' myfile.txt 

Warning on \1 Instead of $1

+1

我覺得OP是尋找「多一個0追加了一些」,而不是/ E – Flexo 2011-03-31 16:53:12

+0

是的,我是爲了使附加解決方案,但好的技巧呢 – tonicebrian 2011-04-01 09:30:50

5

請勿在置換的RHS上使用\1表示法。使用$1

通常,backrefs和八進制表示法之間存在一個模糊問題。或者是。現在解決了。

在最近的Perl版本中,當您需要明確表示反向引用時,可以使用\g{1},並且當您需要明確表示八進制數時,可以使用\o{1}

0

我想擴大eugene的答案只是爲了更準確地包含數字。特別是如果你要做的不是乘以十,而是除以一半。

perl -pi -e 's/(?<!\d|\.)(\d+(?:\.\d+)?)(?!\d|\.)/$1 * 10/ge' file.txt 

此處還有忽略十六進制格式或百分比顏色的版本。方便,如果你正在修改CSS。

perl -pi -e 's/(?<!#|\d|\.)(\d+(?:\.\d+)?)(?!%|\d|\.)/$1 * 10/ge' file.txt