如何在Bash中使用tail获取文件的最后一个非空行?

Deb*_*ger 34 bash tail line

如何tail在Bash shell下使用最后一个非空行?

例如,my_file.txt看起来像这样:

你好
hola
bonjour
(空行)
(空行)

显然,如果我这样做,tail -n 1 my_file.txt我会得到一个空行.就我而言,我想得到bonjour.我怎么做?

Jür*_*zel 33

使用tac,所以你不必阅读整个文件:

tac FILE |egrep -m 1 .
Run Code Online (Sandbox Code Playgroud)

  • 在OS X上,它是`gtac` (3认同)
  • 为什么使用 `egrep` 而不是 `grep`?正则表达式中没有任何“扩展”。 (2认同)

Hai*_* Vu 26

你可以使用Awk:

awk '/./{line=$0} END{print line}' my_file.txt
Run Code Online (Sandbox Code Playgroud)

该解决方案具有仅使用一个工具的优点.

  • 缺点:需要读取WHOLE文件,并将每个行分配给awk变量 - >这可能是CPU和IO密集型. (7认同)
  • 是的,解决方案很简单,但远没有效率.一个有效的解决方案将打开文件,寻找到最后并向后扫描. (2认同)

Ric*_*dle 23

如何使用grep首先过滤空白行?

$ cat rjh
1
2
3


$ grep "." rjh | tail -1
3
Run Code Online (Sandbox Code Playgroud)

  • 或者,而不是'cat rjh | grep"." | tail -1',使用'grep.rjh | 尾巴-1' (6认同)

小智 6

而不是tac你可以使用tail -r如果可用.

tail -r | grep -m 1 '.'
Run Code Online (Sandbox Code Playgroud)