1.合并行

zj@zj:~/Script/blog_script$ cat test1
1
2
3
4
合并上下两行
zj@zj:~/Script/blog_script$ sed '$!N;s/\n/\t/' test1
1    2
3    4
合并匹配模式及其下一行
zj@zj:~/Script/blog_script$ sed '/2/{N;s/\n/\t/}' test1
1
2    3
4
合并所有行
zj@zj:~/Script/blog_script$ sed ':a;N;s/\n/\t/;ba;' test1
1    2    3    4

2.交换行
2.1已知行号时交换两行
zj@zj:~/Script/blog_script$ cat test
baidu music so terrible so bad
microsoft haha haha
yahoo byebye
google princess so good
这里是交换1,4行.当然你可以根据自己需要修改
zj@zj:~/Script/blog_script$
for(( i=1;i<=4;i++ )); do  case $i in 1) sed -n 4p test;; 4) sed -n
1p test;; *) sed -n ${i}p test;; esac; done
google princess so good
microsoft haha haha
yahoo byebye
baidu music so terrible so bad
连续时好说:
zj@zj:~/Script/blog_script$ sed '1{h;d};2{G}' test
microsoft haha haha
baidu music so terrible so bad
yahoo byebye
google princess so good

2.2不知道行号
要交换的两行是连续行的情况下:
zj@zj:~/Script/blog_script$ sed '/baidu/{h;d};/microsoft/{G}' test
microsoft haha haha
baidu music so terrible so bad
yahoo byebye
google princess so good
ps:交换包含bai与microsoft的行
两行不连续的情况:

zj@zj:~/Script/blog_script$ sed '/baidu/{:a;N;/google/!ba;s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/}' test
google princess so good
microsoft haha haha
yahoo byebye
baidu music so terrible so bad
ps:交换含有baidu与google的行

研究了下写了个不论连续不连续的都可以的:
zj@zj:~/Script/blog_script$
sed
'/baidu/{:a;N;/microsoft/!ba;/[^\n]*baidu[^\n]*\n[^\n]*microsoft[^\n]*$/{s/\([^\n]*baidu[^\n]*\)\n\(.*\)/\2\n\1/};s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/}'
test
microsoft haha haha
baidu music so terrible so bad
yahoo byebye
google princess so good

zj@zj:~/Script/blog_script$
sed
'/baidu/{:a;N;/google/!ba;/[^\n]*baidu[^\n]*\n[^\n]*google[^\n]*$/{s/\([^\n]*baidu[^\n]*\)\n\(.*\)/\2\n\1/;};s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/}'
test
google princess so good
microsoft haha haha
yahoo byebye
baidu music so terrible so bad

ps:上面代码
/baidu/{....}  遇到含有baidu的行,开始做{}中的命令序列
:a;N;/google/!ba  循环读信息,直到读取google.
/[^\n]*baidu[^\n]*\n[^\n]*google[^\n]*$/这个就是说如果哦baidu与google之间只有一个\n,即这两个是连续行就:{s/\([^\n]*baidu[^\n]*\)\n\(.*\)/\2\n\1/;}交换这两行

如果不匹配上面的模式就是说不是连续行了.
s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/}
而在匹配连续行的情况下是不可能匹配上面表达式的.ok~~~~

3.忘了还有交互奇偶行
zj@zj:~/Script/blog_script$ sed '$!N;s/\([^\n]*\)\n\([^\n]*\)/\2\n\1/' test
microsoft haha haha
baidu music so terrible so bad
google princess so good
yahoo byebye

4.删除行就不用说了吧
d喽....

5.删除空行
sed '/^$/d' test2
删除多个空行为一个空行
sed '/^$/{N;/^\n*$/D}' test2

 
转载自:http://blog.chinaunix.net/uid-9950859-id-98222.html
 

附:sed的合并行的方法

处理前:
114.113.144.2:
19ms
19ms
19ms
36ms
22ms
19ms
18ms
218.61.204.73:
0ms
0ms
0ms
0ms
0ms
0ms
0ms
处理后:
114.113.144.2: 19ms 19ms 19ms 36ms 22ms 19ms 18ms
218.61.204.73: 0ms 0ms 0ms 0ms 0ms 0ms 0ms
 
解决方法(稍有改动):
1.awk 'NR>1&&!/ms/{print ""}{printf $0" "}END{print ""}' file
解释:行号大于1且没有匹配到ms就换行,把每一行都打印出来,用空格隔开,最后,换行。
 
2.sed ':a;$!N;/ms$/s/\n/ /;ta;P;D' file
解释:设置一个标签a,除了最后一行,其他行都执行把下一行的数据添加到模式空间,当匹配到以ms结尾的行就把换行符换成空格,如果替换成功,就重复执行a否则就将模式空间的第一行打印出来,然后删除模式空间的第一行,开始下一个循环。
重点解释一下P和D:
P:打印模式空间的第一行。
D:删除模式空间的第一行,开始一个新的循环。
这个命令第一次打印前的模式空间的内容是:
114.113.144.2: 19ms 19ms 19ms 36ms 22ms 19ms 18ms
218.61.204.73:
通过P命令,sed就会把第一行打印出来,然后再通过D命令,把第一行删掉,然后第二行就变成第一行了。此时模式空间的内容就是:
218.61.204.73:
 
3.cat file | xargs -n8
 
4.paste -sd '       \n' file
-s:将一个文件的数据每次都水平地输出。
-d '       \n':将默认分隔符Tab换成7个空格和1个换行符,即前8个数据用空格隔开,然后换行。
 
5.sed -e :a -e '$!N;/\n.*ms/{s/\n/ /;ta};P;D' file
解释:我不知道写这命令的人为什么要用-e,其实直接用sed ':a;$!N;/\n.*ms/s/\n/ /;ta;P;D' file不是更好?这个命令跟第2个命令是一样。
 
6.sed -n '/^.*[.]/{:m;N;/\n.*[.]/!{s/\n/ /;bm};P} file
解释:这个命令的运行结果是:
114.113.144.2: 19ms 19ms 19ms 36ms 22ms 19ms 18ms
只有一行,所以肯定有问题,经我改过之后是这样的:sed '/^.*[.]/{:m;N;/\n.*[.]/!{s/\n/ /;bm};P;D} file,方法跟第2个命令是一样的,只是把简单问题复杂化了。

sed行处理详解(交换行,合并行,删除行等)的更多相关文章

  1. VLC命令行参数详解

    VLC命令行参数详解 2012-11-29 14:00 6859人阅读 评论(0) 收藏 举报 Usage: vlc [options] [stream] ...You can specify mul ...

  2. 转:MySQL Row Format(MySQL行格式详解)

    MySQL Row Format(MySQL行格式详解) --转载自登博的博客

  3. ASP.NET 操作Cookie详解 增加,修改,删除

    ASP.NET 操作Cookie详解 增加,修改,删除 Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密).定义于RFC2109.它 ...

  4. awk.sed.grep三剑客详解

    事前准备1.主机node1:172.16.133.112.作为实验的文件/etc/passwd /etc/fstab qinqin cp /etc/passwd . cp /etc/fstab . 一 ...

  5. ios label 自动计算行高详解

    在OC当中自动计算行高主要调用系统的 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ffffff } span ...

  6. sed命令用法详解

    sed命令用法 sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space) ...

  7. Kubernetes 实践指南之Kubernetes 的命令行工具详解

    kubectl作为客户端CLI工具,可以让用户通过命令行的方式对Kubernetes集群进行管理.本节内容将对kubectl的子命令和用法进行详细描述. 一.kubectl 用法概述 kubectl语 ...

  8. sed命令使用详解

        内容来自马哥视频,感谢马哥精彩讲解 sed:编辑器 sed: Stream EDitor, 行编辑器,逐行进行处理 grep:实现文本过滤 awk:文本报告生成器 sed默认不编辑源文件,而是 ...

  9. Git应用详解第二讲:Git删除、修改、撤销操作

    前言 前情提要:Git应用详解第一讲:Git分区,配置与日志 在第一讲中我们对Git进行了简单的入门介绍,相信聪明的你已经了解Git的基本使用了. 这一讲我们来进一步深入学习Git应用,着重介绍Git ...

随机推荐

  1. iOS 用自签名证书实现 HTTPS 请求的原理

    在16年的WWDC中,Apple已表示将从2017年1月1日起,所有新提交的App必须强制性应用HTTPS协议来进行网络请求.默认情况下非HTTPS的网络访问是禁止的并且不能再通过简单粗暴的向Info ...

  2. 进阶之路(基础篇) - 005 模拟PWM波控制引脚

    /********************************* 代码功能:输出PWM波控制引脚 使用函数: 创作时间:2016*10*07 作者邮箱:jikexianfeng@outlook.c ...

  3. 一台电脑存放多个git账户的多个rsa秘钥(转)

    如何在一个电脑上存储多个git账户生成的多份rsa秘钥,实现多个账户同时使用配置的情况?今天,不幸又再次遇到这个问题. 问题描述 公司最近在开发一款开源产品,项目被托管在github上,但是公司内部一 ...

  4. aaronyang的百度地图API之LBS云 笔记[开发准备]

    我的脚印 1.注册百度账号 先到163邮箱注册个邮箱(注册邮箱),用这个邮箱注册百度账号(注册百度),激活百度账号 2.登陆百度账号,进入 百度地图 申请为LBS开发者 2.1 注册申请为百度开发者( ...

  5. CTreeCtrl鼠标双击响应函数中怎么知道双击的是哪个子项?

    原帖链接: http://bbs.csdn.net/topics/310185501 楼主: CTreeCtrl鼠标双击响应函数中怎么知道双击的是哪个子项? 6楼: CPoint pt;GetCurs ...

  6. SharePoint 2013怎样创建Wiki库

    们使用Wiki页面来分享知识,增进团队合作.下面我将向大家展示SharePoint 2013 Wiki的使用方法.教程我都将以这张Wiki页面(即当前页)为示例. 编辑页面 如要编辑页面,单击顶部Ed ...

  7. [转]PostgreSQL源码结构

    PostgreSQL采用C/S(客户机/服务器)模式结构.应用层通过INET或者Unix Socket利用既定的协议与数据库服务器进行通信. 另外,还有一种‘Standalone Backend’使用 ...

  8. VB将MSHFlexGrid数据导出到Excel文件通用功能

    1.通用导出Excel功能. 2.将 MSHFlexGrid数据导出到Excel文件通用功能. 3.具体代码如下: '将下列代码保存到一模块文件中,调用方法:Export fgrid1,cd1 Pub ...

  9. 设置Myeclipse中的代码格式化、注释模板及保存时自动格式化

    1:设置注释的模板: 下载此模板:  codetemplates.xml 搜索Dangzhang,将其改为你自己的姓名,保存 打开eclipse/myeclipse选择 window-->Pre ...

  10. PHP实现JS的无符号右移(>>>)

    举例: JS: 5>>>2 PHP function uright($a, $n) { $c = 2147483647 >> ($n - 1); return $c &a ...