LinuxSir.cn,穿越时空的Linuxsir!

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

删除空行疑问

[复制链接]
发表于 2006-7-1 22:12:57 | 显示全部楼层 |阅读模式
$ sed -e '/^[[:space:]]*$/d' /your/files

这是删除文件中多余的空行和空格。

谢谢
发表于 2006-7-1 22:14:48 | 显示全部楼层
sed /^$/d就可以了。
回复 支持 反对

使用道具 举报

发表于 2006-7-1 22:24:06 | 显示全部楼层
我现在想到

sed /^$/d删除的是"真正"的空行

而sed -e '/^[[:space:]]*$/d'删除的包括"真正"的和"看上去"的空行

两者的区别在于,"看上去的"空行可能包括空白字符如空格和制表符。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-3 10:24:33 | 显示全部楼层
对的,是这样的。


但是我不明白为什么要加个 * 号?

谢谢
回复 支持 反对

使用道具 举报

发表于 2006-7-3 10:30:02 | 显示全部楼层
*表示匹配0或多个在它之前的字符,这里就是0个或多个空白字符。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-3 12:43:22 | 显示全部楼层
谢谢

还有-e 是指后面跟正则表达式  ?

如果省略 -e ,命令也是可以执行的
回复 支持 反对

使用道具 举报

发表于 2006-7-3 13:01:38 | 显示全部楼层
-e表示后面跟的是sed的表达式(模式+命令),举例说吧:

把下述行保存为test.txt

  1. line1

  2. line2

  3. line3
复制代码


sed test.txt -e '/^$/d'
是正确的


sed test.txt '/^$/d'
则会出错

同样
sed -e '/^$/d' -e '/line/d' test.txt
是正确的


sed -e '/^$/d' '/line/d' test.txt
则会出错

只有在只有一个表达式且作为第一个参数时,才可以省略`-e'选项。

订正:前面的sed '/^$/d'漏了单引号,在某些shell中会出错。
回复 支持 反对

使用道具 举报

发表于 2006-7-3 13:03:39 | 显示全部楼层
-e 后面跟正则表达式,指定数据的过滤模式。
省略就默认接下来的第一个参数就是过滤模式,剩下的参数作为输入文件名。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-3 17:12:41 | 显示全部楼层
谢谢2位的一直帮助


比如说有文件file,内容是:(line1和line2之间的空行是敲回车产生的,那这个是真正的空行?

line1

line2

上面的文件用 [color="Red"]sed file -e '/^$/d'  命令,无法删除空行,用下面的命令则可以:

[color="red"]sed file -e '/^[[:space:]]$/d'


谢谢
回复 支持 反对

使用道具 举报

发表于 2006-7-3 17:25:19 | 显示全部楼层
那说明空行中有空白字符如空格,tab。

只要用一个能显示这些字符的编辑器如kate,vim打开看看就可以了。

另外,文件换行符是dos的CR/LF,也会出现这个情况。
回复 支持 反对

使用道具 举报

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

本版积分规则

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