Chinaunix

标题: 求助 怎样用shell将一个文件的最后的几行空白行删除呢? [打印本页]

作者: dzsunday    时间: 2008-09-17 10:16
标题: 求助 怎样用shell将一个文件的最后的几行空白行删除呢?
呵呵,每日一问,我又来了,随着大家的帮助sed算渐渐入门,多谢了
但是现在又有个新问题

假如一个文件aaa.csv有如下几行,最后几行是换行,怎么用把最后的几行换行删除呢,谢谢!

==============================
begin~~~~~~~(省略)
~~~~~~~~~(省略)
~~~~~~~~~(省略)
~~~~~~~~~(省略)end
空白行
空白行
空白行
(省略N行)
==============================

问题就是如何把最后的N行空白行删除呢,请教各位
作者: dzsunday    时间: 2008-09-17 10:25
呵呵,好像用这个可以,自己回自己的帖子

tr -s '\n' < aaa.csv >aaa_text.csv
作者: liaosnet    时间: 2008-09-17 10:26
grep -v '^$'
作者: leetaedong    时间: 2008-09-17 10:36
sed '/^$/d' urfile
作者: blackold    时间: 2008-09-17 10:41
标题: 回复 #3 liaosnet 的帖子
Good Job!
作者: dzsunday    时间: 2008-09-17 10:50
呵呵,都能用,多谢各位啦
作者: prc    时间: 2008-09-17 10:50
以上的做法都不对吧
这些做法是删除所有的空白行,不是删除最后几行空白行...
作者: 爱知    时间: 2008-09-17 10:53
sed ':a;N;$!ba;s/\n*$//'
作者: li_haigang    时间: 2008-09-17 10:55
原帖由 leetaedong 于 2008-9-17 10:36 发表
sed '/^$/d' urfile



怎么用sed删除第6行到最后一行中的空行?
一直以为下边的方法可以实现,其实不然。哪位能解释一下为什么下边的写法为什么不行呢?
sed 6,$/^$/d urfile

[ 本帖最后由 li_haigang 于 2008-9-17 10:58 编辑 ]
作者: 爱知    时间: 2008-09-17 10:57
sed '6,$/^\s*$/d' urfile
作者: li_haigang    时间: 2008-09-17 10:59
原帖由 爱知 于 2008-9-17 10:57 发表
sed '6,$/^\s*$/d' urfile


爱知,抱歉。之前有笔误。实际上我的写法与你的写法相同。另外,我已经修正了。
作者: leetaedong    时间: 2008-09-17 11:00
原帖由 li_haigang 于 2008-9-17 10:55 发表



怎么用sed删除第6行到最后一行中的空行?
一直以为下边的方法可以实现,其实不然。哪位能解释一下为什么下边的写法为什么不行呢?
sed 6,$/^$/d urfile


sed '6,$d' urfile
不好意思,没看清题.

可以这样:
sed '6,${/^$/d}' file1

[ 本帖最后由 leetaedong 于 2008-9-17 11:04 编辑 ]
作者: li_haigang    时间: 2008-09-17 11:05
标题: 回复 #12 leetaedong 的帖子
的确可以。为什么一定要用{}括起来呢?

[ 本帖最后由 li_haigang 于 2008-9-17 11:08 编辑 ]
作者: leetaedong    时间: 2008-09-17 11:06
原帖由 li_haigang 于 2008-9-17 11:05 发表
现在你的方法把从第6行到最后一行的非空行也删除了。


已经改过了.
作者: 爱知    时间: 2008-09-17 11:06
原帖由 li_haigang 于 2008-9-17 10:59 发表
爱知,抱歉。之前有笔误。实际上我的写法与你的写法相同。另外,我已经修正了。

我的写法和你的写法不同
作者: leetaedong    时间: 2008-09-17 11:08
原帖由 爱知 于 2008-9-17 10:57 发表
sed '6,$/^\s*$/d' urfile

这个语法错误.
作者: 爱知    时间: 2008-09-17 11:11
标题: 回复 #16 leetaedong 的帖子
是语法错误!
还没发现
把命令和地址能混淆了,呵呵
加 {} 可以

[ 本帖最后由 爱知 于 2008-9-17 11:14 编辑 ]
作者: li_haigang    时间: 2008-09-17 11:11
原帖由 爱知 于 2008-9-17 10:57 发表
sed '6,$/^\s*$/d' urfile



在我的测试系统上的结果如下,不知道你是否进行过测试?

$ cat cu.080917.07
==============================

begin~~~~~~~(省略)
~~~~~~~~~(省略)
~~~~~~~~~(省略)

~~~~~~~~~(省略)end









==============================
$ sed '6,$/^\s*$/d' cu.080917.07
sed: -e expression #1, char 4: unknown command: `/'
作者: 爱知    时间: 2008-09-17 11:16
是我错了
我解释一下
6,$  
》地址
/^\s*$/
》地址
二者都是地址,不能同用,需要嵌套,用{}
作者: 无声无息    时间: 2008-09-17 11:16
原帖由 爱知 于 2008-9-17 11:11 发表
是语法错误!
还没发现
把命令和地址能混淆了,呵呵
加 {} 可以



你的sed版本是?

这种语法在我这里也通不过滴
作者: 爱知    时间: 2008-09-17 11:21
标题: 回复 #20 无声无息 的帖子
刚学,sed 语法记得不熟
现丑,现丑,。。。
作者: blackold    时间: 2008-09-17 11:37
标题: 回复 #20 无声无息 的帖子
加了{}也不行吗?我的可以。
作者: ubuntuer    时间: 2008-09-17 11:50
zj@zj:~/Script/cushell$ sed '6,$/^$/d' test
sed: -e expression #1, char 4: unknown command: `/'
zj@zj:~/Script/cushell$ sed '6,${/^$/d}' test



aaaaaaaaaa

bbbbbb

不加{},语法过不去阿!不加一般后面就只能p,d这些了吧~~




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2