使用awk
,我想打印文件的最后一个匹配行。我只想要匹配的线本身,而不是任何范围的线。我可以使用这样的命令
awk '/foo/' bar.txt
但是,这将打印所有匹配的行,而不仅仅是最后一个。
您可以将值保存在变量中,然后在处理整个文件后打印它:
awk '/foo/ {a=$0} END{print a}' file
$ cat file
foo1
foo2
foo3
4
5
$ awk '/foo/ {a=$0} END{print a}' file
foo3
sed
解决方案:
sed -n '/foo/h;$!b;g;p' bar.txt
将匹配regex
放在保持缓冲区中并分支。继续这样做直到文件结束。到达文件末尾时,从保持空间中抓取行并将其放在模式空间中。打印图案空间。
反转文件并找到第一个匹配项。
tac file | awk '/foo/ {print; exit}'
该命令tail
允许您检索n
输入流的最后几行。您可以通过管道将awk
输出输入tail
以修剪除最后一行之外的所有内容:
awk '/foo/' bar.txt | tail -1
您可以为变量赋值并在处理行及其编号结束时打印它们。
文件:
$ cat file
foo1
foo2
foo3
4
5
命令:
$ awk '/foo/ {a=$0;n=NR} END{print n, a}' file
3 foo3