我正在修改一個大的txt文件。有沒有一種方法可以用零填充字符串模式?例如,從一個或兩個小數點到三個。例如從0.21至0.210或0.5至0.500?我試圖代碼:Perl單行指定小數位
perl -p -i -e 's/(\.\d{1,2})/\10/g' myFile.txt
預先感謝任何幫助:)
我正在修改一個大的txt文件。有沒有一種方法可以用零填充字符串模式?例如,從一個或兩個小數點到三個。例如從0.21至0.210或0.5至0.500?我試圖代碼:Perl單行指定小數位
perl -p -i -e 's/(\.\d{1,2})/\10/g' myFile.txt
預先感謝任何幫助:)
\1
應該$1
。在替換表達式中使用\1
是沒有意義的。如警告所示,這樣做是一個錯誤。$10
而非$1
。使用捲曲消除歧義(${1}0
)。解決方案:
perl -i -pe's/\.\d(\d)?\K/ defined($1) ? "0" : "00" /eg' myFile.txt
perl -i -pe's/\.(\d{1,2})\K/ "0" x (3 - length($1)) /eg' myFile.txt
perl -i -pe's/\.\d(?!\d)\K/0/g; s/\.\d\d\K/0/g;' myFile.txt
由於Barmar said in the comment,你可以使用sprintf
指定小數位的數量。
perl -p -i -e 's/(\d+\.\d+)/sprintf "%.3f", $1/eg' myFile.txt
注:
%.3f
是指具有3個小數位浮點數。e
標誌表示將替換端評估爲表達式。$1
是用來代替\1
更換上側(參見perldoc note here瞭解這個)。
使用'的sprintf()'用'%F'格式,它可以讓你小數點後指定的位數。 – Barmar