在文本文件中,我有一些变量声明,例如:
long foo0,
foo1,
foo2 ;
long foo3;
short foo4;
short foo5, foo6 ;
long foo7, foo8 ;
我想使用Perl在所有“长”类型变量中添加后缀“ _r”,即。foo0 / 1/2/3/7/8,预期输出为:
long foo0_r,
foo1_r,
foo2_r ;
long foo3_r;
short foo4;
short foo5, foo6 ;
long foo7_r, foo8_r ;
但是,我只能提出以下代码段:
#!/usr/bin/env perl
use strict;
use warnings;
while (<DATA>) {
#apply regex match and replace
s/(long\s+)(\w+)(\s*;)/$1$2_r$3/g;
#print current line.
print;
}
##inlined data filehandle for testing.
__DATA__
long foo0,
foo1,
foo2 ;
long foo3;
short foo4;
short foo5, foo6 ;
long foo7, foo8 ;
它仅适用于foo3,但不适用于其他“长” foos。技巧是语法不是固定的。相反,“ long”和“;”之间可能有不确定数量的声明,以“,”分隔。任何人都可以在代码上提供一些提示吗?
您可以使用来更改记录分隔符,$/
并使用负向后搜索来匹配long
该记录中所有不存在的单词。
use strict;
use warnings;
$/=";";
while (<DATA>) {
s/(\w+\b)(?<!\blong)/$1_r/g if /^\s*long/;
print;
}
##inlined data filehandle for testing.
__DATA__
long foo0,
foo1,
foo2 ;
long foo3;
short foo4;
short foo5, foo6 ;
long foo7, foo8 ;
产生
long foo0_r,
foo1_r,
foo2_r ;
long foo3_r;
short foo4;
short foo5, foo6 ;
long foo7_r, foo8_r ;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句