第11章:sed进阶操作

sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法

sed命令行格式为:

 sed  [option]  ‘command’  输入文本

[option] 常用选项:

-n  ---   使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

-e  ---   直接在指令列模式上进行 sed 的动作编辑。

-f  ---   直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作。

-r  ---   sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)。

-i  ---   直接修改读取的档案内容,而不是由屏幕输出。

‘command’ 常用命令:

a   ------    新增

c   ------    取代

d   ------    删除

i    ------    插入

p   ------    列印

s   ------     替换

举例:

Linux系统创建了一个测试文本list,后续部分范例会使用到list测试文本,测试文本list内容如下:

[root@cloucentos6 home]# cat list

John Daggett, 341 King Road, Plymouth MA

Alice Ford, 22 EAST Broadway, Richmond VA

Orville Thomas, 11345 Oak Bridge Road, Tulsa OK

Terry Kalkas, 402 Lans Road, Beaver Falls PA

Eric Adams, 20 Post Road, Sudbury MA

Hubert Sims, 328A Brook Road, Roanoke VA

Amy Wilde, 334 Bayshore Pkwy, Mountain View CA

Sal Carpenter, 73 6th Street, Boston MA

范例1:’command’ 常用命令 s替换,把list文本MA字段替换成Massachusetts字段。

[root@cloucentos6 home]# sed  's/MA/Massachusetts/'  list

John Daggett, 341 King Road, Plymouth Massachusetts

Alice Ford, 22 EAST Broadway, Richmond VA

Orville Thomas, 11345 Oak Bridge Road, Tulsa OK

Terry Kalkas, 402 Lans Road, Beaver Falls PA

Eric Adams, 20 Post Road, Sudbury Massachusetts

Hubert Sims, 328A Brook Road, Roanoke VA

Amy Wilde, 334 Bayshore Pkwy, Mountain View CA

Sal Carpenter, 73 6th Street, Boston Massachusetts

知识点补充:command’ 常用命令 s替换选项并不会影响list文本原来的内容。

范例2:[option] 常用选项 -e指定命令行上的多重指令。三种方法实现多重指令。

[root@cloucentos6 home]# sed  's/MA/,Massachusetts/;s/PA/,Pennsylvania/'  list

John Daggett, 341 King Road, Plymouth ,Massachusetts

Alice Ford, 22 EAST Broadway, Richmond VA

Orville Thomas, 11345 Oak Bridge Road, Tulsa OK

Terry Kalkas, 402 Lans Road, Beaver Falls ,Pennsylvania

Eric Adams, 20 Post Road, Sudbury ,Massachusetts

Hubert Sims, 328A Brook Road, Roanoke VA

Amy Wilde, 334 Bayshore Pkwy, Mountain View CA

Sal Carpenter, 73 6th Street, Boston ,Massachusetts

[root@cloucentos6 home]# sed  -e 's/MA/,Massachusetts/'  -e 's/PA/,Pennsylvania/'  list

John Daggett, 341 King Road, Plymouth ,Massachusetts

Alice Ford, 22 EAST Broadway, Richmond VA

Orville Thomas, 11345 Oak Bridge Road, Tulsa OK

Terry Kalkas, 402 Lans Road, Beaver Falls ,Pennsylvania

Eric Adams, 20 Post Road, Sudbury ,Massachusetts

Hubert Sims, 328A Brook Road, Roanoke VA

Amy Wilde, 334 Bayshore Pkwy, Mountain View CA

Sal Carpenter, 73 6th Street, Boston ,Massachusetts

[root@cloucentos6 home]# sed  '

> s/MA/,Massachusetts/

> s/PA/,Pennsylvania/' list

John Daggett, 341 King Road, Plymouth ,Massachusetts

Alice Ford, 22 EAST Broadway, Richmond VA

Orville Thomas, 11345 Oak Bridge Road, Tulsa OK

Terry Kalkas, 402 Lans Road, Beaver Falls ,Pennsylvania

Eric Adams, 20 Post Road, Sudbury ,Massachusetts

Hubert Sims, 328A Brook Road, Roanoke VA

Amy Wilde, 334 Bayshore Pkwy, Mountain View CA

Sal Carpenter, 73 6th Street, Boston ,Massachusetts

知识点补充:’command’并不是任何情况下都需要将指令用单引号括起来,但需要养成这个好习惯。使用单引号可以阻止shell解释编辑指令中的特殊字符或空格。

范例3:[option] 常用选项 -f直接将 sed 的动作写在一个文本内, -f 文本则可以执行文本内的sed 动作。

[root@cloucentos6 home]# cat  filename

s/MA/,Massachusetts/

s/PA/,Pennsylvania/

s/CA/,California/

[root@cloucentos6 home]# sed  -f  filename  list

John Daggett, 341 King Road, Plymouth ,Massachusetts

Alice Ford, 22 EAST Broadway, Richmond VA

Orville Thomas, 11345 Oak Bridge Road, Tulsa OK

Terry Kalkas, 402 Lans Road, Beaver Falls ,Pennsylvania

Eric Adams, 20 Post Road, Sudbury ,Massachusetts

Hubert Sims, 328A Brook Road, Roanoke VA

Amy Wilde, 334 Bayshore Pkwy, Mountain View ,California

Sal Carpenter, 73 6th Street, Boston ,Massachusetts

知识点补充:再次提醒,显示屏幕上的结果只是临时的,原文本list并没有发生改变。

范例4:[option] 常用选项 –n只打印经过sed 特殊处理的那一行(或者动作)才会被列出来,通常与’command’ 常用命令p打印出某个选择的资料。

[root@cloucentos6 home]# sed  -n  's/MA/Massachusetts/p'  list

John Daggett, 341 King Road, Plymouth Massachusetts

Eric Adams, 20 Post Road, Sudbury Massachusetts

Sal Carpenter, 73 6th Street, Boston Massachusetts

[root@cloucentos6 home]# cat  -n  list  |  sed  - n  '4p'

4     Terry Kalkas, 402 Lans Road, Beaver Falls PA

[root@cloucentos6 home]# cat  -n  list  |  sed  -n  '1,4p'

1     John Daggett, 341 King Road, Plymouth MA

2     Alice Ford, 22 EAST Broadway, Richmond VA

3     Orville Thomas, 11345 Oak Bridge Road, Tulsa OK

4     Terry Kalkas, 402 Lans Road, Beaver Falls PA

[root@cloucentos6 home]# cat  -n  list  |  sed  -n  '1p;4p'

1     John Daggett, 341 King Road, Plymouth MA

4     Terry Kalkas, 402 Lans Road, Beaver Falls PA

知识点补充:2,$p打印第二行到最后一行,$p打印最后一行

范例5:’command’ 常用命令d删除指定行

[root@cloucentos6 home]# cat  -n  list  |  sed  '4d'

1     John Daggett, 341 King Road, Plymouth MA

2     Alice Ford, 22 EAST Broadway, Richmond VA

3     Orville Thomas, 11345 Oak Bridge Road, Tulsa OK

5     Eric Adams, 20 Post Road, Sudbury MA

6     Hubert Sims, 328A Brook Road, Roanoke VA

7     Amy Wilde, 334 Bayshore Pkwy, Mountain View CA

8     Sal Carpenter, 73 6th Street, Boston MA

[root@cloucentos6 home]# cat  -n  list  |  sed  '1,4d'

5     Eric Adams, 20 Post Road, Sudbury MA

6     Hubert Sims, 328A Brook Road, Roanoke VA

7     Amy Wilde, 334 Bayshore Pkwy, Mountain View CA

8     Sal Carpenter, 73 6th Street, Boston MA

[root@cloucentos6 home]# cat  -n  list  |  sed  '1d;4d;8d'

2     Alice Ford, 22 EAST Broadway, Richmond VA

3     Orville Thomas, 11345 Oak Bridge Road, Tulsa OK

5     Eric Adams, 20 Post Road, Sudbury MA

6     Hubert Sims, 328A Brook Road, Roanoke VA

7     Amy Wilde, 334 Bayshore Pkwy, Mountain View CA

知识点补充: $d删除最后一行,/^$/d删除空行,50,$d删除从50行到最后一行,

第11章:sed进阶操作的更多相关文章

  1. 《Linux命令行与shell脚本编程大全》第二十一章 sed进阶

    本章介绍一些sed编辑器提供的高级特性. 21.1 多行命令 按照之前的知识,所有的sed编辑器命令都是针对单行数据执行操作的. 在sed编辑器读取数据流时,它会基于换行符的位置将数据分成行,一次处理 ...

  2. 第11章:MongoDB-CRUD操作--文档--查询

    ①语法 db.collection.find(query, projection) ②参数 query :可选,使用查询操作符指定查询条件 projection :可选,使用投影操作符指定返回的键.查 ...

  3. 零基础学Python--------第11章 使用Python操作数据库

    第11章 使用Python操作数据库 11.1 数据库编程接口 在项目开发中,数据库应用必不可少.虽然数据库的种类有很多,如SQLite.MySQL.Oracle等,但是它们的功能基本都是一样的,为了 ...

  4. 第10章:awk进阶操作

    第10章:awk进阶操作 在第4章:查找与替换简单的讲解了awk的使用,本章介绍详细讲解awk的使用.awk是一个强大的文本分析工具,简单的说awk就是把文件逐行的读入, 以空格为默认分隔符将每行切片 ...

  5. 读《编写可维护的JavaScript》第11章总结

    这周也是拿到了同程的offer,从此走上了前端之路!感谢我的贵人们.再次纪念一下~! 第11章 不是你的对象不要动 11.1 什么是你的 你的对象:当你的代码创建了这些对象或者你有职责维护其他人的代码 ...

  6. 第11章 Windows线程池(1)_传统的Windows线程池

    第11章 Windows线程池 11.1 传统的Windows线程池及API (1)线程池中的几种底层线程 ①可变数量的长任务线程:WT_EXECUTELONGFUNCTION ②Timer线程:调用 ...

  7. 《TCP/IP详解卷1:协议》第11章 UDP:用户数据报协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  8. java JDK8 学习笔记——第11章 线程和并行API

    第11章 线程与并行API 11.1 线程 11.1.1 线程 在java中,如果想在main()以外独立设计流程,可以撰写类操作java.lang.Runnable接口,流程的进入点是操作在run( ...

  9. 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群

    高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...

随机推荐

  1. 使用flume将kafka数据sink到HBase【转】

    1. hbase sink介绍 1.1 HbaseSink 1.2 AsyncHbaseSink 2. 配置flume 3. 运行测试flume 4. 使用RegexHbaseEventSeriali ...

  2. Ubuntu14.04 64bit 编译安装nginx1.7+php5.4+mysql5.6

    我的操作系统是Ubuntu14.04,其它linux系统的操作流程类似. 主要安装的软件是nginx1.7+php5.4+mysql5.6 1. 创建必要目录 sudo mkdir ~/setup s ...

  3. BOE系统与BW系统间的单点登录(注:这里先简单写一下,改天有时间再进行详细的描述)

    1,在BOE系统内进行配置,将BW系统内的用户信息导入BOE 2,在BOE系统内定义这些导入用户对BOE对象有哪些权限 3,用户使用BW系统的用户名密码登录BOE系统:BOE将登录凭证转发给BW系统让 ...

  4. Beginning SDL 2.0(5) 基于MFC和SDL的YuvPlayer

    本文是在“Beginning SDL 2.0(4) YUV加载及渲染”(以下简称BS4)基础上做的功能完善,如果你对之间介绍的内容了解不多,麻烦先阅读之前的内容. 本文主要介绍如何完成一个基于MFC和 ...

  5. nginx源码分析:打开监听套接字的流程

    问题源于在分析nginx的源码时,找了半天没有找到nginx是怎么把监听套接字读事件添加到事件循环中的,后经过仔细的分析,终于搞明白,于是记录一下. 在上一篇module机制中介绍了nginx添加mo ...

  6. kvm libvirt 虚拟机管理

    http://www.2cto.com/os/201203/123128.html kvm虚拟机管理一.环境role         hostname    ip                  O ...

  7. 06-老马jQuery教程-jQuery高级

    1.jQuery原型对象解密 jQuery里面的大部分API都是在jQuery的原型对象上定义的.jQuery源码中对原型对象做了简写的处理.也就是说:jQuery.fn === jQuery.pro ...

  8. 【Unity笔记】UGUI的Text文本框的大小随着文本字数变化

    需求:UGUI的Text文本框的内容会随着文本字数多少/换行而自动改变大小. 给Text加一个Content Size Filter组件(脚本),设置Horizontal Fit和Vertical F ...

  9. C语言 · 栅格打印问题

    算法提高 栅格打印问题   时间限制:1.0s   内存限制:512.0MB      问题描述 编写一个程序,输入两个整数,作为栅格的高度和宽度,然后用“+”.“-”和“|”这三个字符来打印一个栅格 ...

  10. [动态库]动态库生成和使用以及Makefile编写

    转自:https://www.cnblogs.com/ljtknowns/p/5647793.html 文件目录结构如下 1 dynamiclibapp.c 2 Makefile 3 comm/inc ...