首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用UNIX shell脚本删除平面文件的页眉和页脚记录?

如何使用UNIX shell脚本删除平面文件的页眉和页脚记录?
EN

Stack Overflow用户
提问于 2010-11-16 19:52:36
回答 8查看 64.1K关注 0票数 5

我有一个平面文件,如下所示。如何使用UNIX shell脚本从文件中删除页眉和页脚并重写相同的文件。

代码语言:javascript
运行
复制
9 20050427 HEADER RECORD
0000000 00000 000000000 123456 00 654321 DATARECORD
0000000 00000 000000000 123456 00 654321 DATARECORD
0000000 00000 000000000 123456 00 654321 DATARECORD
0000000 00000 000000000 123456 00 654321 DATARECORD
6 20050427 TRAILER RECORD

谢谢,阿伦

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-11-16 20:12:36

..。并使用sed

正如@Baramin所指出的:类型的最小数量是sed '1d;$d',下面是它的工作原理:

按行号

代码语言:javascript
运行
复制
sed -i'' -e '1d' -e '$d' yourfile

1d删除第一行,$d删除最后一行。

或按模式

代码语言:javascript
运行
复制
sed -r -i -e '/^[0-9] [0-9]{8} HEADER RECORD$/d' \
          -e '/^[0-9] [0-9]{8} TRAILER RECORD$/d' yourfile

{8}扩展正则表达式需要-r

或者两者都有

如果你是个超级书呆子,想用最好的方式掩饰自己:

代码语言:javascript
运行
复制
sed -r -i.bak -e '1{/^[0-9] [0-9]{8} HEADER RECORD$/d}' \
              -e '${/^[0-9] [0-9]{8} TRAILER RECORD$/d}' yourfile

-i''将就地更改yourfile。如果您想要将输出存储在另一个文件中(例如,在行尾使用> outputfile ),则将其删除。

票数 10
EN

Stack Overflow用户

发布于 2010-11-16 20:34:41

代码语言:javascript
运行
复制
tail -n +2 filename | head -n -1

我没有我的unix机器来测试,所以这些数字可能是1或2,我不记得他们是机器人1,都是2还是什么,但我总是这样做(我只是在运行命令之前体验一下,看看它是1还是2……tail ...应该删除第一行,head ...应该删除最后一行

票数 9
EN

Stack Overflow用户

发布于 2010-11-16 20:02:31

这很难看,但它似乎有效,至少在你的输入上是这样的:

代码语言:javascript
运行
复制
f='test.txt'; g=`wc -l $f`; h=`echo $g | cut -d ' ' -f1`; head -n $((h-1)) $f | tail -n $((h-2))

F是您的文件的名称。我找不到一种更快的方法从wc的输出中去掉文件名。应该有人能打败它。

如果您想重写相同的文件,只需重定向命令的输出:

代码语言:javascript
运行
复制
f='test.txt'; g=`wc -l $f`; h=`echo $g | cut -d ' ' -f1`; head -n $((h-1)) $f | tail -n $((h-2)) > $f
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4193817

复制
相关文章

相似问题

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