首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Shell脚本剪切文件的开头和结尾

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

Stack Overflow用户
提问于 2013-04-20 08:37:53
回答 4查看 1.9K关注 0票数 1

所以我有一个文件,我想删掉它的前33行和后6行。我想做的是将整个文件放入cat命令(cat文件)中,然后使用"head“和"tail”命令删除这些部分,但我不知道如何做到这一点。(这只是一个想法)

代码语言:javascript
运行
复制
cat file - head -n 33 file - tail -n 6 file

我该怎么做呢?使用"sed“(如何)可以做到这一点吗?提前谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-20 17:08:00

这可能就是你想要的:

代码语言:javascript
运行
复制
$ tail -n +34 file | head -n -6

请参阅tail

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

head

-n,-n=-K打印前K行,而不是前10行;使用前导'-',打印每个文件中除最后K行之外的所有行

手册页。

示例:

代码语言:javascript
运行
复制
$ cat file
one
two
three
four
five
six
seven
eight

$ tail -n +4 file | head -n -2
four
five
six

请注意,您不需要cat (请参阅UUOC)。

票数 3
EN

Stack Overflow用户

发布于 2013-04-20 08:52:45

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

代码语言:javascript
运行
复制
l=$(wc -l file)
awk -v l="$l" 'NR>33&&NR<l-6' file

或者在数组中加载文件,然后打印所需的行:(只读一次文件)

代码语言:javascript
运行
复制
awk '{a[NR]=$0}END{for(i=34;i<NR-6;i++)print a[i]}' file

或者awk with head,不要这样想太多:(读取文件两次)

代码语言:javascript
运行
复制
awk 'NR>33' file|head -n-6
票数 2
EN

Stack Overflow用户

发布于 2013-04-20 18:25:38

代码语言:javascript
运行
复制
 sed -n '1,33b; 34{N;N;N;N;N};N;P;D' file

这将会工作+

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16115335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档