我的Perl程序只删除字符串的最后三个字符。目前,我正在寻找一种方法来找到包括+
的计数,并使用substr
或(如果Perl中有任何内置函数的话)来删除。
open my $hfile, $ARGV[0] or die "Can't open $ARGV[0] for reading: $!";
while( my $line = <$hfile> ){
if ($line =~ /+/){
$line = substr($line, -3);
print $line;
}
}
close $hfile;
输入档
hello_aba+32
gaww_ajnd_arhb+176
ajnbjsdsjn+416
输出档案
hello_aba
gaww_ajnd_arhb
ajnbjsdsjn
2条答案
按热度按时间zpjtge221#
这是perl一行程序的经典任务。在删除控制字符后的字符时,我会使用一些警告。首先,将其固定到行尾。其次,确保只删除预期的字符。
假设要删除的字符1)不包括加号
+
,2)不包括换行符,我会写:[^ ... ]
是一个字符类,它与^
求反,表示“匹配与内部内容不匹配的任何字符”。虽然
+
后面什么都不跟可能被认为是一个文字加号而不是一个 meta字符,我认为转义它\+
是正确的,并防止未来的更新错误。确保行的其余部分不包含+
确保任何额外的加号不会导致我们丢失数据,例如:添加
$
作为行尾会将匹配项固定到行尾。这将防止任何额外的+
符号扰乱我们的输入。否则它将删除找到的前两个加号之间的内容。由于我们没有删除行尾
\n
,因此文件结构保持不变。演示:
如果要更改输入文件,可以使用重定向:
或者添加
-i
开关以执行就地编辑:(
.bak
将创建扩展名为.bak
的备份文件)。请注意,原始文件将被覆盖,因此请谨慎使用。q9yhzks02#
要删除行中“+”后面的任何内容,请使用替换正则表达式: