如果在shell命令行当中有多个命令的话,最好使用{}将命令包含在其中;

1 多行命令

1.1next命令

1.1.1 单行next命令

小写的n命令告诉sed编辑器移动到数据流文本的下一行,而不是回到命令的最开始。请记住,通常sed编辑器在但个行上处理完所有的命令后才移动到文本的下一行。

eg:

root@jiangjian-K42JZ:/home/jiangjian# cat data
This is the header lineThis is a data lineThis is the last line
root@jiangjian-K42JZ:/home/jiangjian# sed '/header/{
> n
> d
> }' data
This is the header line
This is a data lineThis is the last line
root@jiangjian-K42JZ:/home/jiangjian#

这个data文本当中有两个空行,这里选择的删除了第一个,而如果是在单行的情况下,都会删除的。

eg:

root@jiangjian-K42JZ:/home/jiangjian# cat data
This is the header lineThis is a data lineThis is the last line
root@jiangjian-K42JZ:/home/jiangjian# sed '/^$/d' data
This is the header line
This is a data line
This is the last line
root@jiangjian-K42JZ:/home/jiangjian# 

1.1.2 组合多行文本

next的命令的多行版本(使用大写的N)将文本的下一行添加到已经存在与模式空间的文本当中,模式空间是指sed将要处理的文本

root@jiangjian-K42JZ:/home/jiangjian# cat data
This is the header line
This is a data line
This is the last line
root@jiangjian-K42JZ:/home/jiangjian# sed '/header/{
> N
> s/\n/ /
> }' data
This is the header line This is a data line
This is the last line
root@jiangjian-K42JZ:/home/jiangjian#

组合多行文本还可以处理跨行的文本

root@jiangjian-K42JZ:/home/jiangjian/sh# cat data3
The frist meeting of the Linux System
Administrator's group will be held on Tuesday.
All System Administrators should attend this meeting.
Thank you for your attendance
root@jiangjian-K42JZ:/home/jiangjian/sh# sed '
N
s/System.Administrator/Desktop User/
' data3
The frist meeting of the Linux Desktop User's group will be held on Tuesday.
All Desktop Users should attend this meeting.
Thank you for your attendance
root@jiangjian-K42JZ:/home/jiangjian/sh#

可以发现替换命令使用了通配符以匹配空格和换行符,然后,在匹配到换行符时,它被从字符串中删除了,导致两行合并为一行,这可嫩那个不是我们想要的结果。

要解决这个问题,可以在sed编辑器脚本中使用两个替换命令,一个匹配跨行出现的内容,一个匹配单行出现的内容。

root@jiangjian-K42JZ:/home/jiangjian/sh# cat data3
The frist meeting of the Linux System
Administrator's group will be held on Tuesday.
All System Administrators should attend this meeting.
Thank you for your attendance
root@jiangjian-K42JZ:/home/jiangjian/sh# sed '
> N
> s/System\nAdministrator/Desktop\n User/
> s/System Administrator/Desktop User/
> '  data3
The frist meeting of the Linux DesktopUser's group will be held on Tuesday.
All Desktop Users should attend this meeting.
Thank you for your attendance
root@jiangjian-K42JZ:/home/jiangjian/sh#

这里存在一个问题就是当N下面不存在行时,sed编辑器就会停止工作,

root@jiangjian-K42JZ:/home/jiangjian/sh# cat data3
The frist meeting of the Linux System
Administrator's group will be held on Tuesday.
All System Administrators should attend this meeting.
root@jiangjian-K42JZ:/home/jiangjian/sh# sed '
> N
> s/System\n Administrator/Desktop\n User/
> s/System  Administrator/Desktop User/
> ' data3
The frist meeting of the Linux System
Administrator's group will be held on Tuesday.
All System Administrators should attend this meeting.#未被处理
root@jiangjian-K42JZ:/home/jiangjian/sh# 

解决方式,将当行命令移动到N命令之前,

root@jiangjian-K42JZ:/home/jiangjian/sh# cat data3
The frist meeting of the Linux System
Administrator's group will be held on Tuesday.
All System Administrators should attend this meeting.
root@jiangjian-K42JZ:/home/jiangjian/sh# sed '
> s/System Administrator/Desktop User/
> N
> s/System\n Administrator/Desktop\nUser/
> ' data3
The frist meeting of the Linux System
Administrator's group will be held on Tuesday.
All Desktop Users should attend this meeting.
root@jiangjian-K42JZ:/home/jiangjian/sh# 

1.2多行删除命令

使用单行删除命令必须要小心,

root@jiangjian-K42JZ:/home/jiangjian/sh# cat data3
The frist meeting of the Linux System
Administrator's group will be held on Tuesday.
All System Administrators should attend this meeting.
root@jiangjian-K42JZ:/home/jiangjian/sh# sed '
> N
> /System\nAdministrator/d
> ' data3
All System Administrators should attend this meeting.
root@jiangjian-K42JZ:/home/jiangjian/sh#

这里删除了一行有System,下一行有Administrator的行的两行。

sed提供了多行删除命令D,它只撒谎年初模式空间中的第一行。它将删除直至换行符的所有字符。

root@jiangjian-K42JZ:/home/jiangjian/sh# cat data3
The frist meeting of the Linux System
Administrator's group will be held on Tuesday.
All System Administrators should attend this meeting.
root@jiangjian-K42JZ:/home/jiangjian/sh# sed '
> N
> /System\nAdministrator/D
> ' data3
Administrator's group will be held on Tuesday.
All System Administrators should attend this meeting.
root@jiangjian-K42JZ:/home/jiangjian/sh#

这个命令的用途可以 删除在找到数据字符串的行前面出现的文本行。

例:删除第一个空行

root@jiangjian-K42JZ:/home/jiangjian/sh# cat data.txt
This is head lineThis is a data lineThis is the last line
root@jiangjian-K42JZ:/home/jiangjian/sh# sed '/^$/{
N
/data/D      #指明了空行下面行存在data字符串,就执行删除前面一个模式空间
}' data.txt
This is head line
This is a data lineThis is the last line
root@jiangjian-K42JZ:/home/jiangjian/sh#

1.3多行打印命令

使用P,可以打印多行模式空间中的第一行。

root@jiangjian-K42JZ:/home/jiangjian/sh# cat data3
The frist meeting of the Linux System
Administrator's group will be held on Tuesday.
All System Administrators should attend this meeting.
root@jiangjian-K42JZ:/home/jiangjian/sh# sed -n '
> N
> /System\nAdministrator/P
> ' data3
The frist meeting of the Linux System

高级sed编程1--多行命令相关推荐

  1. 高级shell编程笔记(第十二章 外部过滤器,程序和命令)

    第十二章 外部过滤器,程序和命令 标准的UNIX命令使得脚本更加灵活.通过简单的编程结构把shell指令和系统命令结合起来,这才是脚本能力的所在. 12.1 基本命令 新手必须掌握的初级命令 ls 基 ...

  2. 打开高效文本编辑之门_Linux sed之多行命令与循环命令

    Linux sed之多行命令与循环命令使用案例 声明与简介 sed:Stream Editor文本流编辑,sed是一个"非交互式的"面向字符流的编辑器. sed模式匹配是对文件的一 ...

  3. linux运维脚本编写,最强Linux自动化运维 Shell高级脚本编程实战 带习题+项目实战案例+全套配置脚本...

    最强Linux自动化运维 Shell高级脚本编程实战 带习题+项目实战案例+全套配置脚本 大家可以通过参考下面的课程学习目录,就会发现单单只从目录上来分析就知道这是一部非常系统的Shell自动化脚本运 ...

  4. Linux下高级C编程(学习总结)

    Linux下高级C编程 第一章 unix/linux系统的基本概念 第二章 unix/linux系统下的编程基础和开发方式 第三章 unix/linux系统下的内存管理 第四章 unix/linux系 ...

  5. 西门子 HTML浏览器 上不了网,【高级技巧】PROFINET高级网页编程使用入门

    1 高级网页编程介绍 1.1 描述 PROFINET基于工业以太网,是开放的,标准的,实时的工业以太网标准,这意味着日新月异的以太网IT技术可以融入到PROFINET以及相关的PROFINET产品中. ...

  6. 《UNIX高级环境编程》 -- apue.h

    在看<UNIX高级环境编程>这本书的时候,会遇到一个问题就是这个"apue.h",这个是作者为了编写代码方便封装了一个库,我们可以使用下面的方式解决这个问题,让我们的代 ...

  7. c#endread怎么打印出来_C#编程直接发送打印机命令到打印机及ZPL常用的打印命令详解...

    本文主要向大家介绍了C#编程直接发送打印机命令到打印机及ZPL常用的打印命令详解,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助. using System; using System.Co ...

  8. JDK下载地址、SecureCRT中JDK安装和环境配置、SecureCRT窗口编程、linux下命令运行小程序

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 下载linux版本的JDK.java SE.java EE JDK是通用的, 32位系统选Li ...

  9. 西工大java高级网络编程_西工大16春《JAVA高级网络编程》平时作业

    西工大16春<JAVA高级网络编程>平时作业 7 o& [9 w  ^# D  Z一.单选题:[25道,总分:100分]5 z# ?* Z! M% M1 h4 R# n. D+ a ...

最新文章

  1. 大转盘完整源码附效果图,可以下载直接用
  2. java.awt.Graphics2D绘制流程图基本元素
  3. 一次流量不均衡问题的排查记录
  4. 京东购物在微信等场景下的算法应用实践
  5. 比亚迪后续车都会搭在鸿蒙系统吗_华为鸿蒙系统上车,比亚迪汉发布!我告诉你华为鸿蒙到底是什么...
  6. 后端开发必备的 MySQL 日志文件知识点
  7. C#+AE 地图制图(二)
  8. Proteus20个应用技巧
  9. c++ 连接webservice实例
  10. 腾讯 信鸽测试demo
  11. 拓嘉辰丰电商:拼多多店铺如何成功拼单
  12. 对38位互联网大佬奇葩癖好的奇葩解读
  13. python做三维图片挑战眼力_查找「儿童大家来找茬图片」安卓应用 - 豌豆荚
  14. 69张图回顾2021和看透2022
  15. 罗米欧与朱丽叶(徐志摩)
  16. ggplot绘图之基本语法
  17. 第八十四章 Caché 函数大全 $ZDATEH 函数
  18. Teamview免费版连接超限解决办法
  19. 微信公众平台API接口开发教程
  20. 国内外十大CRM管理系统盘点,2023年哪个品牌值得用?

热门文章

  1. 《魔兽世界》任务系统体验 2
  2. StringBuilder 拼接
  3. java biginteger 取模_Java BigInteger类
  4. python UserBasedCF
  5. 图片处理:将JPEG格式批量修改为JPG格式
  6. 微图App中如何切换在线地图
  7. [虚幻引擎][UE][UE5]简单的游戏读档存档
  8. 女生学计算机科学与技术还是软件工程,学计算机科学与技术好还是学软件工程好?...
  9. 海贼王关于团队的概念
  10. 飞机选座 --- 一道可用动态规划解决的概率问题