LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1237|回复: 5

怎样删除文件末尾的空行?

[复制链接]
发表于 2007-5-3 02:35:00 | 显示全部楼层 |阅读模式
如题,现在有些个文件需要这样处理。文件中间的空行需要保留。
发表于 2007-5-3 03:24:13 | 显示全部楼层
ÕÕÙ个,ïý有ô简单的žÕ:

#!/bin/bash

file_name=$1
line_num=`wc -l <${file_name}`

while [ ${line_num} -ge 0 ]; do
        line_str=`sed -n "${line_num}p" ${file_name}`
        if [ "ok${line_str}" = "ok" ]; then
                continue
        else
                break
        fi
        line_num=$[${line_num}-1]
done

if [ ${line_num} -eq 0 ]; then
        rm $file_name
else
        sed -i -n "1,${line_num}p" $file_name
fi
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-3 03:53:19 | 显示全部楼层
多谢了!不过指出两个问题:

1、wc -l < file 的话就可以把awk省掉
2、循环的那里初始化有问题,如果我的文件最后没有空行,那么最后一行会被删掉,应当把if提到前面
回复 支持 反对

使用道具 举报

发表于 2007-5-3 11:11:00 | 显示全部楼层
试试这个:

[PHP]sed -n ':b;/^[[:blank:]]*$/b n;p;n;b b;:n;H;n;/^[[:blank:]]*$/b n;H;s/.*//;x;s/\n//;p;n;b b' filename[/PHP]
回复 支持 反对

使用道具 举报

发表于 2007-5-3 12:57:34 | 显示全部楼层
Post by GGMM
多谢了!不过指出两个问题:

1、wc -l < file 的话就可以把awk省掉
2、循环的那里初始化有问题,如果我的文件最后没有空行,那么最后一行会被删掉,应当把if提到前面


好的,我改过来了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-3 13:45:02 | 显示全部楼层
Post by linux_now
试试这个:

  1. sed -n ':b;/^[[:blank:]]*$/b n;p;n;b b;:n;H;n;/^[[:blank:]]*$/b n;H;s/.*//;x;s/\n//;p;n;b b' filename
复制代码


太强了,看不懂啊。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表