几天前CSDN看到一个帖子http://bbs.csdn.net/topics/390848841,楼主贴了以下的问题:

  1. 例:
  2. 12345
  3. 67890
  4. 1234567890
  5. 123
  6. 4567890
  7. 怎样能把上面数据转换成
  8. 1234567890
  9. 1234567890
  10. 1234567890
    看了几位网友的回复。认为还是挺有意思,也收获了一些知识,由于部分网友仅仅给出了解决方法,没有解释下。我依据自己的理解,对几个答案解释下(不一定准确,错误之处请指正)
我觉得错的答案
1    首先楼主给出了一个他说调试不出来的答案:
  1. sed 's/(?!90)\n//g'
?!

应该是非pattern结尾的意思,这个答案应该是说把非90结尾的行的换行符换位空。

这个答案应该是不可行的。sed默认单行模式。一次处理一行,执行时发现,就算我们把换行符去掉了。sed命令结束后。还是将它当成完整的一行输出(也就是说,应该是自己主动又加上换行符了)
2.    有一位网友。认为其它答案太复杂,给出了以下的方法
sed ‘N;s/\n//g’

        这个答案使用了sed的多行模式,但应该是无法实现楼主的目的的。我们看执行结果“
windeal@ubuntu:~/Windeal/shell$ sed 'N;s/\n//g' a.txt
1234567890
1234567890123
4567890

能够看出,sed 的N命令把第二行接到第一行后面,把第四行接到第三行后面,没有考虑到我们目标中:仅仅有非90结尾的才把下一行附加上来。所以第四行的123被附加到第三行1234567890而出现了错误的结果。

我觉得对的答案
再来看两个我觉得对的答案:
1.
sed -e '/^/{:loop /90$/!{N;b loop};s/\n//g}' test.txt > t2.txt
改一下好理解一点就是
sed '{:myloop /90$/!{N;b myloop};s/\n//g}' a.txt

/^/的意思我没弄明确。应该是匹配每一行吧
      在该命令中。myloop是一个自己定义的标签。

类似程序语言中goto用的标签。 N表示多行模式,b表示分支(相当于goto)

这样就好理解了。sed会读取一行内容,假设这一行不是以90结尾。/90$/! 就为真,进入{N;b myloop}。

N就进入了多行模式。把下一行附加上来,然后进入分支b
myloop,在推断是不是以90结尾,这样重复读取,直到读到以90结尾的行。

接下来模式空间的读取工作已经完毕。进入下一个命令。替换。s/\n//g​这个命令把当前模式空间的换行符都转换为空,也就是拼接成一行。

    如此,我们就完毕了我们要的目的。


2. 
awk '{if($0~/90$/){print}else{printf("%s",$0)}}' a.txt 
这个答案读取了一行的所以字段(实际上就1个字段,) 用$0表示,然后if($0~/90$/)推断是不是以90结尾。
假设以90结尾,就输出当前行数据。
假设不是,就格式化输入当前航的字符串
注意print和printf的差别




awk与sed:关于多行的样本的更多相关文章

  1. awk与sed:一个关于多行处理的例子

    前几天在CSDN上看到一个帖子http://bbs.csdn.net/topics/390848841,楼主贴了下面的问题: 例: 12345 67890 1234567890 123 4567890 ...

  2. Linux 三剑客(Awk、Sed、Grep)

    grep/egrep 主要作用:给搜索过滤出来的内容加上颜色和排除功能 常用参数 -V 打印grep的版本号 -E 解释PATTERN作为扩展正则表达式,也就相当于使用egrep. 或操作 -F 解释 ...

  3. linux中cut、printf、awk、sed命令

    cut.printf.awk.sed在linux中都是用来处理文本的命令,接下来一个一个看. 一.cut命令 cut [选项] 文件名 选项: 主要使用一下两个参数,若是只使用 -f 则默认的分割符为 ...

  4. awk 和 sed (Stream Editor)

    1.sed pattern space(模式空间)相当于车间sed把流内容在这里处理: hold space(保留空间)相当于仓库,加工的半成品在这里临时储存(当然加工完的成品也在这里存储). h/H ...

  5. awk、sed处理文件的简单例子

    awk.sed对处理日志文件和写shell脚本时非常有益.这个东西,如果不经常操作,真心过一段时间就忘差不多..要掌握熟练,就要多练习,这没什么可说的. awk '条件{命令}' filename 假 ...

  6. awk和sed (十二)

    [教程主题]:4.awk和sed [主要内容] [1]awk AWK是贝尔实验室1977年搞出来的文本出现神器.之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberg ...

  7. AWK与SED命令

    linux系统比较常用的AWK与SED命令,这两个命令主要是格式化文本文件信息.接下来将详细介绍这两个命令的基本用法以及可以实现的功能. 一.AWK命令 AWK语言的基本功能是在文件或者字符串中基于指 ...

  8. awk、sed、grep更适合的方向

    awk.sed.grep更适合的方向: grep 更适合单纯的查找或匹配文本 sed 更适合编辑匹配到的文本 awk 更适合格式化文本,对文本进行较复杂格式处理 关于awk内建变量个人见解,简单易懂 ...

  9. 处理海量数据的grep、cut、awk、sed 命令

    grep.cut.awk.sed 常常应用在查找日志.数据.输出结果等等,并对我们想要的数据进行提取. 通常grep,sed命令是对行进行提取,cut跟awk是对列进行提取 处理海量数据之grep命令 ...

随机推荐

  1. 《转》MFC网络编程学习

    原地址:http://www.cnblogs.com/renyuan/archive/2013/06/04/3117006.html要学习好网路编程,主要看以下几个方面: 1.掌握概念,诸如:同步(S ...

  2. python中逐行读取文件的最佳方式_Drupal_新浪博客

    python中逐行读取文件的最佳方式_Drupal_新浪博客 python中逐行读取文件的最佳方式    (2010-08-18 15:59:28)    转载▼    标签:    python   ...

  3. Lua学习笔记9:多文件

    一 终端中运行多个文件:-l 增加在文件一中定义了一个变量,在还有一文件里输出这个变量.代码例如以下: --file1.lua num = 100 --file2.lua print(num) 终端输 ...

  4. 【OpenCV新手教程第14】OpenCVHough变换:霍夫变换线,霍夫变换圆汇编

    本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26977557 作者:毛星云(浅墨) ...

  5. hdu3294(manacher)

    传送门:Girls' research 题意:求最长回文串并输出位置及转换后的字符串. 分析:manacher算法算出最长回文串后记录中心位置,然后再转换回原字符串的起始和结束位置. #pragma ...

  6. 最经常使用的两种C++序列化方案的使用心得(protobuf和boost serialization)

    导读 1. 什么是序列化? 2. 为什么要序列化?优点在哪里? 3. C++对象序列化的四种方法 4. 最经常使用的两种序列化方案使用心得 正文 1. 什么是序列化? 程序猿在编写应用程序的时候往往须 ...

  7. HTC one/M7电信802d 毒蛇ViperOne2.1.0/高级毒蛇工具/完美root,精简/更多自定义,稳定,流畅ROM

    ROM版本 HTC One/M7 802d ROM作者 雪狼团队·大盛 http://weibo.com/DaShengdd Android版本 Android 4.2.2 创建日期 2013.09. ...

  8. NYOJ 12 喷水装置(二)

    pid=12">喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n( ...

  9. Redis集群_3.redis主从自动切换Sentinel(转)

    Redis SentinelSentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在redis2.4+的版本中 一.Sentinel作用:1):Master状态检测 2 ...

  10. android旋转动画和平移动画具体解释,补充说一下假设制作gif动画放到csdn博客上

    先上效果图: 我这里用的是GifCam来制作的gif动画,能够在http://download.csdn.net/detail/baidu_nod/7628461下载, 制作过程是先起一个模拟器,然后 ...