1

所以我有一个文件,我想剪掉它的前 33 行和最后 6 行。我想做的是在 cat 命令(cat 文件)中获取整个文件,然后使用“head”和“tail”命令删除这些部分,但我不知道该怎么做。例如(这只是想法)

cat file - head -n 33 file - tail -n 6 file

我该怎么做?是否可以使用“sed”(如何)来做到这一点?提前致谢。

4

4 回答 4

3

这可能是你想要的:

$ 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)。

于 2013-04-20T09:07:59.663 回答
2

首先计算总行数,然后打印中间部分:(读取文件两次)

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
于 2013-04-20T00:52:45.130 回答
1

这可能对您有用(GNU sed):

sed '1,33d;:a;$d;N;s/\n/&/6;Ta;P;D' file
于 2013-04-20T19:16:51.773 回答
1
 sed -n '1,33b; 34{N;N;N;N;N};N;P;D' file

这将工作 +

于 2013-04-20T10:25:37.583 回答