我有一个平面文件,如下所示。如何使用UNIX shell脚本从文件中删除页眉和页脚并重写相同的文件。
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谢谢,阿伦
发布于 2010-11-16 20:12:36
..。并使用sed
正如@Baramin所指出的:类型的最小数量是sed '1d;$d',下面是它的工作原理:
按行号
sed -i'' -e '1d' -e '$d' yourfile1d删除第一行,$d删除最后一行。
或按模式
sed -r -i -e '/^[0-9] [0-9]{8} HEADER RECORD$/d' \
-e '/^[0-9] [0-9]{8} TRAILER RECORD$/d' yourfile{8}扩展正则表达式需要-r。
或者两者都有
如果你是个超级书呆子,想用最好的方式掩饰自己:
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 ),则将其删除。
发布于 2010-11-16 20:34:41
tail -n +2 filename | head -n -1我没有我的unix机器来测试,所以这些数字可能是1或2,我不记得他们是机器人1,都是2还是什么,但我总是这样做(我只是在运行命令之前体验一下,看看它是1还是2……tail ...应该删除第一行,head ...应该删除最后一行
发布于 2010-11-16 20:02:31
这很难看,但它似乎有效,至少在你的输入上是这样的:
f='test.txt'; g=`wc -l $f`; h=`echo $g | cut -d ' ' -f1`; head -n $((h-1)) $f | tail -n $((h-2))F是您的文件的名称。我找不到一种更快的方法从wc的输出中去掉文件名。应该有人能打败它。
如果您想重写相同的文件,只需重定向命令的输出:
f='test.txt'; g=`wc -l $f`; h=`echo $g | cut -d ' ' -f1`; head -n $((h-1)) $f | tail -n $((h-2)) > $fhttps://stackoverflow.com/questions/4193817
复制相似问题