我想显示从第n行开始的所有行。 比如说,打印文件的第三行以及后续的所有行直到文件结尾。 是否有相应命令可以实现这个功能?
来自manpage的摘录:
例如。-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行开始的文件内容。
sed
:sed -n '3,$p' file
这将选择第三行到末尾并打印它。
从第5行开始显示:
awk 'NR>4' file
awk
:awk 'BEGIN{n=5}NR<=n{next}1' file
BEGIN{n=5}
- 在文件处理开始之前,将 n
设置为要跳过的行数(5)。NR<=n{next}
- 如果行号小于或等于 n
,则跳过处理。1
- 打印其他所有内容的简写形式。awk 'NR>5' file
,但既然已经有人提出了这个建议,我想补充一下,就像 sed
一样,awk
也支持范围操作符。因此,awk 'NR==5,0' file
也可以工作。 - jaypal singh打印输出,但删除1至2行:
sed '1,2d' filename
awk
命令,只需将行打印到记录号NR
大于或等于三的行即可:< /p >
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
如果您在UNIX环境下(特别是bash),那么很难找到比这更短的命令了。当然,您也可以使用以下命令:
alias x awk 'NR>=3'
:-)
{print}
将被隐含。所以 awk 'NR>=3' file
将会执行。 - tripleee
tail
手册! - Auspex但是有一个手册可以回答OP的问题。就是tail手册!
不,他的问题明确提到了有没有相应的命令?
这清楚地表明他不知道相关的“命令名称”是什么。 - Scott Privetail -n +6 $(git status)
,我希望它能给我一个已编辑文件的列表,但实际上它会进入文件本身并从第六行开始提取,这不是我想要的。 - stevecgit status -s | cut -c 4- | xargs code
- stevec