Chinaunix首页 | 论坛 | 博客
  • 博客访问: 365649
  • 博文数量: 53
  • 博客积分: 139
  • 博客等级: 入伍新兵
  • 技术积分: 589
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-27 01:55
个人简介

学习linux,学习编程。

文章分类

全部博文(53)

文章存档

2019年(1)

2018年(4)

2016年(4)

2014年(11)

2013年(33)

分类: LINUX

2013-09-19 16:05:56

我在查看sed中文版手册(老版本),网址是:
... /11/19/972647.shtml
通篇看下来,遇到一个例题:将连续的空白行修改成一个空白行。
但是执行它,它却不会删除空白行。当时不知道是什么原因。

下面是从“sed中文版手册 3.3小节”中引用:
  sed -e '/^$/{
   N
   /^$/D
   }' 文件檔
其中 , 函数参数 N(参照[section4.16])表示 , 将空白行的下一行资料添加至 pattern space 内。函数参数 /^$/D 表示 , 当添加的是空白行时 , 删除第一行空白行 , 而且剩下的空白行则再重新执行指令一次。指令重新执行一次 , 删除一行空白行 , 如此反复直至空白行后添加的为非空白行为止 , 故连续的空白行最后只剩一空白行被输出。

通过命令info sed查看sed 的info手册,这里有一些编程例题,其中有一个是关于压缩空白行的例题,
类似于 cat -s。下面的(脚本)程序来源于sed 的info手册。

#!/usr/bin/sed -f

# delete all leading empty lines
1,/^./{
/./!d
}

# on an empty line we remove it and all the following
# empty lines, but one
:x
/./!{
N
s/^\n$//
tx
}

参考上面提到的脚本程序;并且使用sed 的函数参数 l(小写的L),来修改文章开头提到的命令,得到这个命令:
sed  -e'/^$/{N; l; /^$/D}' 文件檔。这个命令可以用来检测输出。最后得到的结果是:
修改一下文章开头提到的命令就能够得到正确的结果。修改后的命令如下:

sed  -e'/^$/{N; /^\n$/D}' 文件檔

因此,有可能是翻译或者文字输入的时候漏掉了几个字母导致的问题。
阅读(2044) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~