高级sed编程1--多行命令
如果在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--多行命令相关推荐
- 高级shell编程笔记(第十二章 外部过滤器,程序和命令)
第十二章 外部过滤器,程序和命令 标准的UNIX命令使得脚本更加灵活.通过简单的编程结构把shell指令和系统命令结合起来,这才是脚本能力的所在. 12.1 基本命令 新手必须掌握的初级命令 ls 基 ...
- 打开高效文本编辑之门_Linux sed之多行命令与循环命令
Linux sed之多行命令与循环命令使用案例 声明与简介 sed:Stream Editor文本流编辑,sed是一个"非交互式的"面向字符流的编辑器. sed模式匹配是对文件的一 ...
- linux运维脚本编写,最强Linux自动化运维 Shell高级脚本编程实战 带习题+项目实战案例+全套配置脚本...
最强Linux自动化运维 Shell高级脚本编程实战 带习题+项目实战案例+全套配置脚本 大家可以通过参考下面的课程学习目录,就会发现单单只从目录上来分析就知道这是一部非常系统的Shell自动化脚本运 ...
- Linux下高级C编程(学习总结)
Linux下高级C编程 第一章 unix/linux系统的基本概念 第二章 unix/linux系统下的编程基础和开发方式 第三章 unix/linux系统下的内存管理 第四章 unix/linux系 ...
- 西门子 HTML浏览器 上不了网,【高级技巧】PROFINET高级网页编程使用入门
1 高级网页编程介绍 1.1 描述 PROFINET基于工业以太网,是开放的,标准的,实时的工业以太网标准,这意味着日新月异的以太网IT技术可以融入到PROFINET以及相关的PROFINET产品中. ...
- 《UNIX高级环境编程》 -- apue.h
在看<UNIX高级环境编程>这本书的时候,会遇到一个问题就是这个"apue.h",这个是作者为了编写代码方便封装了一个库,我们可以使用下面的方式解决这个问题,让我们的代 ...
- c#endread怎么打印出来_C#编程直接发送打印机命令到打印机及ZPL常用的打印命令详解...
本文主要向大家介绍了C#编程直接发送打印机命令到打印机及ZPL常用的打印命令详解,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助. using System; using System.Co ...
- JDK下载地址、SecureCRT中JDK安装和环境配置、SecureCRT窗口编程、linux下命令运行小程序
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 下载linux版本的JDK.java SE.java EE JDK是通用的, 32位系统选Li ...
- 西工大java高级网络编程_西工大16春《JAVA高级网络编程》平时作业
西工大16春<JAVA高级网络编程>平时作业 7 o& [9 w ^# D Z一.单选题:[25道,总分:100分]5 z# ?* Z! M% M1 h4 R# n. D+ a ...
最新文章
- 大转盘完整源码附效果图,可以下载直接用
- java.awt.Graphics2D绘制流程图基本元素
- 一次流量不均衡问题的排查记录
- 京东购物在微信等场景下的算法应用实践
- 比亚迪后续车都会搭在鸿蒙系统吗_华为鸿蒙系统上车,比亚迪汉发布!我告诉你华为鸿蒙到底是什么...
- 后端开发必备的 MySQL 日志文件知识点
- C#+AE 地图制图(二)
- Proteus20个应用技巧
- c++ 连接webservice实例
- 腾讯 信鸽测试demo
- 拓嘉辰丰电商:拼多多店铺如何成功拼单
- 对38位互联网大佬奇葩癖好的奇葩解读
- python做三维图片挑战眼力_查找「儿童大家来找茬图片」安卓应用 - 豌豆荚
- 69张图回顾2021和看透2022
- 罗米欧与朱丽叶(徐志摩)
- ggplot绘图之基本语法
- 第八十四章 Caché 函数大全 $ZDATEH 函数
- Teamview免费版连接超限解决办法
- 微信公众平台API接口开发教程
- 国内外十大CRM管理系统盘点,2023年哪个品牌值得用?