如何获取包含\ n的最后一行?

时间:2015-07-27 22:05:47

标签: regex bash file newline tail

根据定义,一行必须以换行符(\n)(ref.)结尾。但就本文而言,无论是否以\n结束,我都会将任何一系列字符视为一行。

命令tail -n 1返回最后一行,无论它是否以\n结尾。如何从文件中获取以\n结尾的最后一行,无论该行是文件的最后一行还是倒数第二行?

2 个答案:

答案 0 :(得分:6)

这是使用Perl的一种方法:

perl -ne '$s = $_ if /\n$/ }{ print $s' file

该脚本逐个读取文件的每一行,如果它以$s结尾,则将其分配给变量\n。读取文件后,将打印$s。如果最后一行没有以换行结束,那么将打印倒数第二行,如下所示:

$ cat file
first line
second
third$ perl -ne '$s = $_ if /\n$/ }{ print $s' file
second

请注意,我故意留在$中显示提示,由于缺少换行符,该提示位于文件最后一行的末尾。

答案 1 :(得分:5)

cat -vte file|grep "\$$"|tail -1

这个怎么样?或者用cat -vte

的其他方式

这样就可以删除额外的$:

echo -en "Enter\nEnter again\nNo enter this time"|cat -vte|grep "\$$"|sed 's/\$$//g'|tail -1

Linux的+1变体(Perl regexp,正向前瞻断言,仅显示匹配部分):

echo -en "Enter\nEnter again\nNo enter this time"|cat -vte|grep -Po ".*(?=\\\$$)"|tail -1