在perl中,我如何模式匹配一​​个字符串,以查看一行中是否存在回车符

时间:2013-08-14 11:19:48

标签: regex perl perl-module

我正在使用这个简单的代码来读取文件并将所有值放入数组中。

open (TEXT_FILE, "$file_name") || die "can't open $_";
@file_data=<TEXT_FILE>;
close TEXT_FILE;

我正在阅读的文件是一个文本文件,并使用unix或windows进行编辑。因此,在每一行的末尾,它可能包含回车符和换行符(如果是窗口),并且可能只包含换行符(如果是unix)。如果存在,我想删除回车。 我在想这样的事情

foreach(@file_data)
{
 if($_ =~ /something to match a carriage return at the end of line/)
 {
   chop $_;
 }
 else{ #do nothing
 }
}

如果我做得对,那么请建议我一些其他方案也提出其他方案。 在此先感谢!!

2 个答案:

答案 0 :(得分:4)

如果您对快速修复感兴趣,可以查看dos2unix实用程序。在Perl中,你可以做到

perl -pi -le 's/[\r\n]+\z//' yourfile.txt

-pi执行就地编辑(无备份,除非您向-i添加扩展名),-l开关为您处理换行符(打印时删除并放回) )。

如果您想使用自己的代码,只需在循环中应用相同的正则表达式。

答案 1 :(得分:1)

回车符是\r,所以只需:

s/\r$//;