如何显示文本文档的最后一段?

如何显示文本文档的最后一段?

假设我有三个小段落,字数为 100 多一点,我如何只显示最后一段?

答案1

您可以使用awk段落模式(当RS为空时;段落由空行序列分隔,忽略前导和尾随空行):

awk -v RS= 'END{print}' < file.txt

请注意,如果输入文件不包含任何段落(为空或仅包含空行),它将打印空行。为了防止这种情况,您可以将上面的内容更改为:

awk -v RS= 'END{if (NR) print}' < file.txt

NR是数量记录(在这种情况下段落)在文件中)。

答案2

假设您的段落由空行分隔,则以下命令应该有效(将三个“测试”实例替换为您的文件名):

tail -n `expr $(wc -l test | cut -f1 -d' ') - \
              $(grep -ERn '^$' test | tail -n1 | grep -o '[0-9]\+')` test

我很确定有一个更简单的解决方案,在这里我正在寻找最后一个空白行grep -ERn '^$' test | tail -n1并删除第一个空白行之前的所有内容tail

答案3

假设您的输入中没有尾随空行,您可以运行:

sed 'H;/^$/h;$!d;x' infile

这会用每个段落的内容覆盖保留空间,删除模式空间,除非在交换缓冲区的最后一行上。请注意,您将在输出中得到一个前导空行,但这很容易删除......我将把它作为练习留给您。

答案4

详细阐述船长帽的答案,你可以做一些更简单的事情awk

tail -n$(tac myFile.txt | awk '/^$/{print NR-1; exit}') myFile.txt

假设段落由空行分隔(或仅包含空格)。

tac编辑:在和之间感到困惑rev,你需要使用tac它才能真正工作。

编辑:如果您担心文件中的尾随空行,可以使用以下方法来解决它们awk

tail -n $(tac myFile.txt | \
          awk 'BEGIN{i=1} /^$/{if (NR == i) {i++} else {print NR-1; exit}}') \
     myFile.txt

测试了一下,似乎可以按预期工作!

相关内容