几天前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. windows下Memcached 架设及java应用

    1  Memcached 介绍   Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据 ...

  2. 【LeetCode】Min Stack 解题报告

    [题目] Design a stack that supports push, pop, top, and retrieving the minimum element in constant tim ...

  3. 最想做的三个Delphi项目:Paint,IM,SQL,另外还有Smart,TMS,FMX,UML,FreePascal,Python4Delphi,Cheat Engine

    都是绝美项目- 如果有时间,要做的项目:0. 整整5个Cloud项目(可带来商业收益,其中还包括手机发送, S/D/N/L/NetDriver)1. Heidi/front/SQLITE STUDIO ...

  4. 为Delphi程序增加UAC功能(每个步骤都很详细)

    相关资料:http://bbs.csdn.net/topics/320071356# 操作方法: 在Source\VCL目录下应该有这样两个文件sample.manifest和WindowsXP.rc ...

  5. thinkphp URL规则、URL伪静态、URL路由、URL重写、URL生成(十五)

    原文:thinkphp URL规则.URL伪静态.URL路由.URL重写.URL生成(十五) 本章节:详细介绍thinkphp URL规则.URL伪静态.URL路由.URL重写.URL生成 一.URL ...

  6. 高效合并两个有序数组(Merge Sorted Array)

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: Y ...

  7. Tomcat在Linux上安装

    1. 下载并 安装 tomcat wget  http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.14/bin/apache-tomcat-8.0 ...

  8. 微信 SDK 不能 分享

    说多了都是泪水,真的. 前段时间,做好了微信的分享功能,测试通过的,最近我又跑了一遍用例,发现不能启动微信客户端了,怎么都启动不了,日志如下:ignore wechat app signature v ...

  9. Spark实践的阶段性总结

    写这篇小总结是因为前段时间是自己业余时间对Spark相关进行了些探索,接下来可能有别的同事一起加入,且会去借用一些别的服务器资源,希望可以借此理下思路. 实践Spark的原因 在之前Spark简介及安 ...

  10. 约瑟夫问题--list模拟循环链表

    约瑟夫问题 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 n个人想玩残酷的死亡游戏,游戏规则例如以下: n个人进行编号,分别 ...