我有一个包含大量数据的庞大文件。
我想替换
Function_map(var33, 1.95);
与
Function_map(var33, 1.95);\nFunction_map(var18, 1.95);
1.95的价值各不相同。
例如:
Function_map(var33,1.95); - >如果存在
Function_map(var33,1.95);
Funcion_map(var18,1.95) - >在文件
Function_map(var33,1.7); - >如果存在
Function_map(var33,1.7);
Funcion_map(var18,1.7) - >在文件
答案 0 :(得分:3)
perl -i~ -pe '$_ .= "${1}18$2\n" if /(Function_map\(var) 33 (,[ ][0-9.]+\);)/x' input
说明:
-p
逐行处理文件-i~
“就地”更改文件,创建filename~
备份33
之前的所有内容都存储在$ 1中,并且在它之后的所有内容都会转到$ 2;并且那些中间有18个的结果被附加到要打印的行上。答案 1 :(得分:0)
假设你正在运行Perl 5的10或更高版本,你可以使用\K
(keep)regex构造来编写它。它允许在浮点数
+
或-
个符号
use strict;
use warnings;
use 5.010;
my $s = 'Function_map(var33, 1.95);';
$s =~ s/Function_map\(var33,\s*([+\-0-9.]+)\);\K/\nFunction_map(var18, $1);/;
say $s;
<强>输出强>
Function_map(var33, 1.95);
Function_map(var18, 1.95);
如果要更改手动输入的代码,那么您可能希望在与语句含义无关的位置添加可选空格。并且使用/x
修饰符允许您向模式添加无关紧要的空白将是有利的。喜欢这个
$s =~ s{
Function_map \s* \( var33 \s* , \s* ([+\-0-9.]+) \s* \) \s* ;
\K
}{\nFunction_map(var18, $1);}x;
此替换的结果与上面代码的结果相同