Regex Perl正则表达式忽略空行

Regex Perl正则表达式忽略空行,regex,perl,Regex,Perl,我有一个perl表达式,它显示文本文件最后一行的数字。我的perl表达式如下 tail -1 new.txt | perl -e 'while (<>) {s/----//; s/:.*$//; print "$_\n" ;}' 现在,我如何更改表达式,以便即使它在--109:newchange下面找到空行,它也会跳过它们并仅返回109 我的new.txt如下所示 Create TAble <TAble name> ----109:new change1 Upda

我有一个perl表达式,它显示文本文件最后一行的数字。我的perl表达式如下

tail -1 new.txt | perl -e  'while (<>) {s/----//; s/:.*$//; print "$_\n" ;}'
现在,我如何更改表达式,以便即使它在
--109:newchange
下面找到空行,它也会跳过它们并仅返回
109

我的new.txt如下所示

Create TAble <TAble name>

----109:new change1

Update Table <TAble name>

----110:new change2

Drop table <tablename>

----111:new change3
     <empty line>  
     <empty line>             
创建表
----109:新变化1
更新表
----110:新变化2
升降台
----111:新变化3
根据这个文本文件,它应该给出111作为结果,尽管在最后一个非空行之后有许多空行

我的要求概要如下


无论最后有多少空行和空格,我都需要显示111作为结果。

您是说需要处理最后一个非空行。这就是你得到它的方式:

tac new.txt | sed -e '/./,$!d' | head -n 1
您可以通过管道将其传输到perl命令。或者,例如,这个:

| perl -pe 's/\D*(\d+):.*/$1/'
综合起来:

tac new.txt | sed -e '/./,$!d' | head -n 1 | perl -pe 's/\D*(\d+):.*/$1/'

为您提供的样本返回
111

仅当在
----
之后找到一个样本时,才会打印编号

tail -1 new.txt | perl -lne 'print $1 if /----(\d+)/'
  • -l
    隐式换行,并在
    打印
  • -n
    隐式
    while(){}
    循环代码
更新:要仅拾取最后一个编号

perl -lne '$num =$1 if /----(\d+)/ }{print $num' new.txt

添加
下一步,除非$\到你的循环中,技能完全空行。但是,tail-1只会给您最后一行,因此您需要在文件的后面开始,如下所示:

tail -5 new.txt | perl -e  'while (<>) {next unless $_; s/----//; s/:.*$//; $last=$_; } print "$last\n";'
tail-5new.txt | perl-e'while(){next-inspect$\s/----//;s/:.*$//;$last=$\u;}打印“$last\n”

用最大数量的空行替换-5。这将打印文件中看到的最后一个数字。

我的文本文件中有这么多。我想选择最后一个,即使有空行之后,它给我空白行现在创建表109:新变化1更新表110:新的变化2滴表- 111:新的change3@user3793536在你的问题中发表上述评论。不。。没用。。每次我得到空行。。我添加了空行,并检查没有空格,但是它没有给我任何结果。你可以只尝试第一部分,看看是否有结果吗?它只移动到下一行。否result@user3793536那么你能提供new.txt文件的示例内容吗?谢谢。创建表格----109:新变更1更新表格----110:新变更2删除表格----111:新变更33-4我得到的结果是空行这是什么?上面的perl代码只包含一个循环外的print语句,注意
next,除非$\uz
在这种情况下运行良好,但基本上忽略了任何具有假值的行,即忽略包含数字0的行。另一种选择是
next if/^\s*$/
tail -5 new.txt | perl -e  'while (<>) {next unless $_; s/----//; s/:.*$//; $last=$_; } print "$last\n";'