我想显示从第n行开始的所有行。比如说,打印文件的第三行和所有以下行直到文件结束。是否有命令?
答案 0 :(得分:52)
你可以使用尾巴
摘自该联机帮助页:
-n, --lines=K output the last K lines, instead of the last 10; or use -n +K to output lines starting with the Kth
例如
tail -n +10 file
输出从第10行开始的文件内容
答案 1 :(得分:10)
从第5行开始:
awk 'NR>4' file
答案 2 :(得分:9)
sed -n '3,$p' file
这只是填充文本,因为stackoverflow并不了解短命令行。
答案 3 :(得分:5)
打印,但删除第1行到第2行:
sed '1,2d' filename
答案 4 :(得分:5)
您可以像这样使用awk
:
awk 'BEGIN{n=5}NR<=n{next}1' file
BEGIN{n=5}
- 在文件处理开始之前,将n
设置为要跳过的行数(5)。NR<=n{next}
- 如果行号小于或等于n
,则跳过处理。1
- print
其他所有内容的简写。答案 5 :(得分:2)
awk
命令只能通过打印NR
记录号为3或更多的行来执行此操作:
awk 'NR>=3' input_file_name
如果需要,您还可以使用变量将值传递给awk
:
awk -v n=3 'NR>=n' input_file_name
(您也可以使用-v n=${num}
来使用环境变量。)
您可以使用许多其他工具来执行相同的工作,其中包括tail
,sed
和perl
,或者,因为这是一个编程问答网站,只需滚动你自己的:
#include <stdio.h>
int main (void) {
// Need character and # of newlines to skip.
int ch, newlines = 2;
// Loop until EOF or first lines skipped, exit on EOF.
while ((ch = getchar()) != EOF)
if ((ch == '\n') && (--newlines == 0))
break;
if (ch == EOF)
return 0;
// Now just echo all other characters, then return.
while ((ch = getchar()) != EOF)
putchar (ch);
return 0;
}
现在你通常不会为此编写自己的过滤程序,但是,由于你要求最短的命令,你可以使用该源代码创建一个名为x
的可执行文件来执行此操作:
x <input_file_name
你很难找到比这更短的命令。当然,假设您处于UNIXy环境中(特别是bash
),您还可以:
alias x awk 'NR>=3'
: - )