免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: idragon
打印 上一主题 下一主题

如何删除连续的空行? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2003-08-25 10:13 |只看该作者

如何删除连续的空行?

sed 的工作过程:
1、将一个输入行复制到模式空间中。模式空间是一个特定的缓冲区,可以保存用于处理的一个或多个文本行;
2、从上到下,将脚本中的指令,依此应用到匹配指令中指定地址的所有模式空间行。
3、如果未指定-n选项禁止自动输出,则将模式空间内容复制到输出文件中。

从以上可以看到sed首先取输入行到模式空间进行处理,但sed还有一个保留空间上面没提到;有了保留空间,我们就可以把一些在模式空间处理完的语句放到保留空间,留作以后引用;

一般情况下,需要用h、H把模式空间的内容复制到保留空间,然后再用g、G将保留空间的内容复制到模式空间,并打印输出;

比如下面这个例子:

  1. $sed -nf exchange.sed exchange.dat
  2. #Script Name:exchange.sed
  3. #This script exchanges pairs of lines in a file

  4. #copy pattern to hold
  5. h
  6. #read next line
  7. n
  8. #retrieve hold area
  9. G
  10. p
复制代码

  1. 执行:
  2. input:    output:   
  3. line 1      line 2
  4. line 2       line 1
  5. line 3       line 4
  6. line 4       line 3
复制代码


sed '/^$/d;G' filename>filename.new
初看admirer兄的代码,没太明白,以为会初错,试了一下,感到奇怪;书上没提到sed中的d会将删除的内容保留到保留空间(反正偶看过的书没说);一般我们都是主动用h或H将模式空间的内容复制到保留空间里留作它用;

汗~~~

又学到了书本外的知识

论坛徽章:
0
12 [报告]
发表于 2003-08-25 10:16 |只看该作者

如何删除连续的空行?


  1. #Script Name:del.sed
  2. #This script deletes extra blank lines

  3. /^$/{
  4.          $!N
  5.          /^\n$/D
  6. }
复制代码

论坛徽章:
0
13 [报告]
发表于 2003-08-25 10:22 |只看该作者

如何删除连续的空行?

[quote]原帖由 "admirer"]sed '/^$/d;G' filename[/quote 发表:
     


明白了,因为保留空间没又东西,老大直接G回来一个空行!
PFPF

支持当斑竹

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
14 [报告]
发表于 2003-08-25 10:25 |只看该作者

如何删除连续的空行?

原帖由 "nmgzw" 发表:

sed '/^$/d;G' filename>filename.new
初看admirer兄的代码,没太明白,以为会初错,试了一下,感到奇怪;书上没提到sed中的d会将删除的内容保留到保留空间(反正偶看过的书没说);一般我们都是主动用h或H将模式..........

我可没有误导大家的意思噢!
这里没有明显的为保留曲提供原始值,但他的默认值为空,d   没有置保留区的隐含功能,特此说明。

论坛徽章:
0
15 [报告]
发表于 2003-08-25 13:44 |只看该作者

如何删除连续的空行?

跟AD兄学习 真是受益非浅啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP