Tos*_*ock 38 linux bash command-line
是否有(POSIX命令行)方式打印所有文件除了最后n行?用例是,我将有多个未知大小的文件,所有文件都包含一个已知大小的样板页脚,我想删除它.我想知道在自己编写之前是否已有一个实用程序可以执行此操作.
Ada*_*m B 42
head(1)的大多数版本 - 特别是派生的GNU,但不是BSD派生的 - 具有执行此操作的功能.如果您使用负数作为要打印的行数,它将显示除结尾之外的文件顶部.
像这样:
head -n -10 textfile
Run Code Online (Sandbox Code Playgroud)
use*_*645 14
可能效率低于"wc"+"做数学"+"尾巴"方法,但更容易看:
tail -r file.txt | tail +NUM | tail -r
Run Code Online (Sandbox Code Playgroud)
哪NUM一个比你要删除的结束行数多一个,例如+11将打印除最后10行之外的所有行.这适用于不支持head -n -NUM语法的BSD .
该head实用程序是你的朋友.
从手册页head:
Run Code Online (Sandbox Code Playgroud)-n, --lines=[-]K print the first K lines instead of the first 10; with the leading `-', print all but the last K lines of each file
没有标准命令可以执行此操作,但是您可以使用awk或sed填充N行的缓冲区,并在缓冲区满后从头开始打印。例如,用awk:
awk -v n=5 '{if(NR>n) print a[NR%n]; a[NR%n]=$0}' file
Run Code Online (Sandbox Code Playgroud)