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

Rem*_*i.b 2 regex bash newline file tail

根据定义,一行必须以换行符(\n)结尾.).但是为了这篇文章的目的,我会将任何一系列字符视为一行,无论它是否完成\n.

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

Tom*_*ech 6

以下是使用Perl实现此目的的一种方法:

perl -ne '$s = $_ if /\n$/ }{ print $s' file
Run Code Online (Sandbox Code Playgroud)

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

$ cat file
first line
second
third$ perl -ne '$s = $_ if /\n$/ }{ print $s' file
second
Run Code Online (Sandbox Code Playgroud)

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


zol*_*olo 5

cat -vte file|grep "\$$"|tail -1
Run Code Online (Sandbox Code Playgroud)

那这个呢?或者用cat -vte的其他方式

这样额外的$将被删除:

echo -en "Enter\nEnter again\nNo enter this time"|cat -vte|grep "\$$"|sed 's/\$$//g'|tail -1
Run Code Online (Sandbox Code Playgroud)

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

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