Shell脚本剪切了文件的开头和结尾

时间:2013-04-20 00:37:53

标签: file shell sed cut

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

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

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

4 个答案:

答案 0 :(得分:3)

这可能是你想要的:

$ tail -n +34 file | head -n -6

请参阅tail

  

-n, - lines = K.                 输出最后K行,而不是最后10行;或使用-n + K输出以Kth开头的行

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

答案 1 :(得分: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 with head,不要这么想这么多:(读取文件两次)

awk 'NR>33' file|head -n-6

答案 2 :(得分:1)

 sed -n '1,33b; 34{N;N;N;N;N};N;P;D' file

这将起作用

答案 3 :(得分:1)

这可能适合你(GNU sed):

sed '1,33d;:a;$d;N;s/\n/&/6;Ta;P;D' file