用sed模拟尾巴


8

我有一个小系统,数字仅限于二进制文件(bashcpcatsed,...)。我没有tail命令,我想知道是否可以使用sed

cat foo.txt | tail -n 10

我知道我可以用sed打印1-10行cat foo.txt | sed -n '1,10p',但是我将如何打印最后10行?


2
您可能需要在一个命令行中有许多有用的sed脚本:sed一行
Slyx 2014年

Answers:


15

您可以执行以下操作:

sed -e :a -e '$q;N;11,$D;ba'

sed -e :a -e '$q;N;11,$D;ba' foo匹配问题。
Slyx 2014年

我不知道它是如何工作的,但是它工作得很好。非常感谢。
Martin Vegter 2014年

有人可以解释这个美妙的命令吗?我希望有一个命令可以显示文档的开头结尾,我认为该命令可能会有所帮助,但是我需要添加头部。实际上,我一直在寻找的命令很简单: sed -e '1,11p' -e :a -e '$q;N;11,$D;ba' 但是我仍然想了解尾部!
弗朗克

0
tac foo |  sed -n '1,10p' | tac

但是,如果没有tac,则只能通过以下方式使用sed:

sed -n '1!G;h;$p' foo | sed -n '1,10p' | sed -n '1!G;h;$p'

0

expr可与您的系统?然后,在计算了文件中的总行数之后,您可以尝试评估所需的行号。

我创建了一个名为的文件tmp,每行包含1到20之间的数字。

nlines=$(cat tmp | sed -n '$=')
cat tmp | sed -n $(expr $nlines - 9),"$nlines"p
11
12
13
14
15
16
17
18
19
20

当然,您可以使用wc -l,如果有的话。

计算文件中的总行数的命令取自sed个衬板。但是,我还没有检查它是否也适用于空文件。

PS如果expr不可用,则可以在Bash中使用减号,如下所示:

cat tmp | sed -n $((nlines-9)),"$nlines"p
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.