我有一個問題,可以等於乘以十個數字的問題。第一種方法是:如何使用正則表達式乘以10?
perl -pi -e 's/(\d+)/\1 0/g' myfile.txt
但是這引入了額外的空間,我不能把\ 10,因爲這樣的組不存在。 我的解決辦法是此變通
perl -pi -e 's/(\d+)/\1\l0/g' myfile.txt
到小寫 0,但我敢肯定有,我是不知道的正確方法。
問候。
我有一個問題,可以等於乘以十個數字的問題。第一種方法是:如何使用正則表達式乘以10?
perl -pi -e 's/(\d+)/\1 0/g' myfile.txt
但是這引入了額外的空間,我不能把\ 10,因爲這樣的組不存在。 我的解決辦法是此變通
perl -pi -e 's/(\d+)/\1\l0/g' myfile.txt
到小寫 0,但我敢肯定有,我是不知道的正確方法。
問候。
看你應該使用$1
形式,而不是\1
在換人。這實際上是其中一個原因:對於變量形式,您可以說${1}0
。
請勿在置換的RHS上使用\1
表示法。使用$1
。
通常,backrefs和八進制表示法之間存在一個模糊問題。或者是。現在解決了。
在最近的Perl版本中,當您需要明確表示反向引用時,可以使用\g{1}
,並且當您需要明確表示八進制數時,可以使用\o{1}
。
我想擴大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
我覺得OP是尋找「多一個0追加了一些」,而不是/ E – Flexo 2011-03-31 16:53:12
是的,我是爲了使附加解決方案,但好的技巧呢 – tonicebrian 2011-04-01 09:30:50