所以我有一个文件,我想剪掉它的前 33 行和最后 6 行。我想做的是在 cat 命令(cat 文件)中获取整个文件,然后使用“head”和“tail”命令删除这些部分,但我不知道该怎么做。例如(这只是想法)
cat file - head -n 33 file - tail -n 6 file
我该怎么做?是否可以使用“sed”(如何)来做到这一点?提前致谢。
这可能是你想要的:
$ tail -n +34 file | head -n -6
见tail
-n, --lines=K 输出最后K行,而不是最后10行;或使用 -n +K 输出以第 K 个开头的行
和head
-n, --lines=[-]K 打印前 K 行而不是前 10 行;使用前导“-”,打印每个文件的最后 K 行以外的所有行
手册页。
例子:
$ cat file
one
two
three
four
five
six
seven
eight
$ tail -n +4 file | head -n -2
four
five
six
请注意,您不需要cat
(请参阅UUOC)。
首先计算总行数,然后打印中间部分:(读取文件两次)
l=$(wc -l file)
awk -v l="$l" 'NR>33&&NR<l-6' file
或将文件加载到数组中,然后打印您需要的行:(读取文件一次)
awk '{a[NR]=$0}END{for(i=34;i<NR-6;i++)print a[i]}' file
或者带头的awk,不要这么想:(两次读取文件):
awk 'NR>33' file|head -n-6
这可能对您有用(GNU sed):
sed '1,33d;:a;$d;N;s/\n/&/6;Ta;P;D' file
sed -n '1,33b; 34{N;N;N;N;N};N;P;D' file
这将工作 +