致沅弟:至于当大事,全在明强二字。

              --《曾国藩家书》

参考资料:https://man.linuxde.net/sed

      https://www.jianshu.com/p/047cde9df09b

      https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html

sed

sed命令比较适用于大的文本文件,用普通文本编辑器难以胜任的情况。通常有打印、插入、删除、替换等编辑操作。

[root@www ~]# sed [-nefr] [动作]
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。 动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 到 行之间进行的,则『 ,[动作行为] 』 function:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 ,20s/old/new/g 就是啦!

行打印 

使用子命令p

示例:

  sed '1,3 p' demo.txt

p子命令代表print,可以打印出sed缓冲区的内容。

sed命令中,直接采用数字代表某个特定的文本行:'1 p'代表打印第一行;'1,3p'代表打印1~3行;最后一行的行号使用$。

观察输出结果,不使用-n选项,sed命令把1~3行输出了两次。因为没有使用-n,sed首先读取一行,并默认将缓冲区的文本输出出来,之后p子命令再次输出。使用-n时,默认输出取消,只有p子命令的输出结果。

因此-n显得很重要

-n  取消默认输出

  sed -n '1,3 p' demo.txt

sed命令支持正则定位,语法为'/Regular/'

  示例:

  sed -n '/^xxx/,5 p' demo.txt

  该示例表示打印出匹配正则表达式的地方到第五行,也就是从匹配以xxx开头的文本行处开始。

  sed -n '1~2 p' demo.txt

  1~2表示从第一行开始,行号递增2输出,即输出奇数行。

  语法输出格式为:first~step

插入文本 i

  示例:

  sed -n -e '2 i insert' -e '1,4 p' demo.txt

(出现了新参数-e,-e表示多个子命令【多点编辑】,该示例执行i子命令之后执行了p子命令)

追加文本 a

sed -n -e '2 a insert' -e '1,4 p' demo.txt

从示例可以看出,同一个指定位置,插入在指定位置之前,追加在指定文本之后。

删除文本行 d

删除空白行:

  sed '/^$/d' file

删除文件的第2行

  sed '2d' file

删除文件中所有开头是test的行

  sed '/^test/'d file

替换文本行 c

  sed -n -e '2 c newless' -e '1,$ p' demo.txt

【未使用-i选项参数,因此修改操作的仅为副本】

替换指定文本 s

该命令实用性很广,十分灵活。

语法:

  sed '位置参数 s/pattern/replaced/[flag]'

注释:pattern为要替换的文本,支持正则表达式

   replaced表示用来替换的一般字符串(不支持正则表达式)

   flag为替换标志,用来影响匹配替换的规则:

    flag    用法

    g      全局匹配,会替换文本行中所有匹配的字符串

    十进制n   替换文本行中第n个匹配的字符串

    p      替换第一个匹配的字符串,并将缓冲区输出到标准输出

    w      替换第一个匹配的字符串,并将改动的行为输出到磁盘文件中

    缺省    替换第一个匹配的字符串

示例:

  sed 's/原参数/替换的新参数' demo.txt

  sed 's/book/books' demo.txt

那么可以加入-n参数和p命令,表示只打印那些发生替换的行,可观察输出(会发生替换,但是还没有替换)

  sed -n 's/book/books/p' demo.txt

直接编辑文件选项为-i,会匹配file文件中每一行的第一个book替换为books:

  sed -i 's/book/books/g' demo.txt

全面替换标记“/g”

使用后缀/g标记会替换每一行中的所有匹配

  sed 's/book/books/g' demo.txt

从第N出开始匹配替换时,可以使用/Ng

  echo sksksksksksk | sed 's/sk/SK/2g'

  echo sksksksksksk | sed 's/sk/SK/3g'

定界符

  sed 's:test:Test:g'

  sed 's| text | Text|g'

定界符出现在样式内部的时候,需要进行转义

  sed 's/\/bin/\/user/\/local/\/bin/\/g'

已匹配字符串标记&

正则表达式\w\+匹配每一个单词,使用[&]替换它,&对应于之前所匹配到的单词

  echo This is a test line | sed 's/\w\+/[&]/g'

  输出:[This] [is] [a] [test] [line]

所有以192.168.0.1开头的行都会被替换为它自己加上localhost

  sed 's/^192.168.0.1/&localhost/' file

  输出:192.168.0.1localhost

组合多个表达式

管道符连接即可

  sed '表达式'| sed '表达式' 等价于 sed '表达式;表达式'

Linux必知必会--sed的更多相关文章

  1. 读书笔记--SQL必知必会--建立练习环境

    书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL in 10 Minutes - Fourth Edition> MyS ...

  2. python网络爬虫,知识储备,简单爬虫的必知必会,【核心】

    知识储备,简单爬虫的必知必会,[核心] 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌 ...

  3. 读《MySQL必知必会》我学到了什么?

    前言 最近在写项目的时候发现自己的SQL基本功有些薄弱,遂上知乎查询MYSQL关键字,期望得到某些高赞答案的指点,于是乎发现了 https://www.zhihu.com/question/34840 ...

  4. 《MySQL必知必会》通配符 ( like , % , _ ,)

    <MySQL必知必会>通配符 ( like , % , _ ,) 关键字 LIke WHERE 搜索子句中使用通配符,必须使用 LIKE 操作符. % 百分号通配符 % 表示任意字符出现任 ...

  5. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  6. 读书笔记--SQL必知必会12--联结表

    12.1 联结 联结(join),利用SQL的SELECT在数据查询的执行中联结表. 12.1.1 关系表 关系数据库中,关系表的设计是把信息分解成多个表,一类数据一个表,各表通过某些共同的值互相关联 ...

  7. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  8. 《MySQL 必知必会》读书总结

    这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...

  9. 《SQL必知必会》学习笔记(一)

    这两天看了<SQL必知必会>第四版这本书,并照着书上做了不少实验,也对以前的概念有得新的认识,也发现以前自己有得地方理解错了.我采用的数据库是SQL Server2012.数据库中有一张比 ...

  10. SQL 必知必会

    本文介绍基本的 SQL 语句,包括查询.过滤.排序.分组.联结.视图.插入数据.创建操纵表等.入门系列,不足颇多,望诸君指点. 注意本文某些例子只能在特定的DBMS中实现(有的已标明,有的未标明),不 ...

随机推荐

  1. px转rem vue vscode

    1.vscode中安装px2rem 2.打开settings.json ,新增  "px2rem.rootFontSize": 75, 3.重启vscode 4.可以转换了

  2. 关于微信订阅号里自动回复里的a链接的问题

    前阵子做了一个微信订阅号的活动,然后发现一个问题:就是回复内容里的a标签微信没有解析出来,而是这样 正常应该是这样: 具体出现这种情况的手机有: 魅族的型号是:M1 metal小米的型号是:MI 5X ...

  3. python爬虫实例——爬取歌单

    学习自<<从零开始学python网络爬虫>> 爬取酷狗歌单,保存入csv文件 直接上源代码:(含注释) import requests #用于请求网页获取网页数据 from b ...

  4. docker-compose可持续集成之jenkins

    1.下载docker-compose curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-co ...

  5. Java程序特性

    1.1.简单性 Java的语法比C++简单,第二,JAVA类库比较小,可以跑在嵌入式上面. 1.2面向对象 Java与C++的不同在于,Java是接口继承,而C++是多继承. 1.3网络技能 Java ...

  6. elasticsearch迁移数据到新索引中

    因为业务原因,需要修改索引的映射的某个字段的类型,比如更改Text为Keyword. 需要如下步骤: 1).先新建索引,映射最新的映射实体 2).迁移老索引的数据到新索引中(数据较大的话,可以分批迁移 ...

  7. LPAT: Learning to Predict Adaptive Threshold for Weakly-supervised Temporal Action Localization [Paper Reading]

    Motivation: 阈值分割的阈值并没有通过模型训练学出来,而是凭借主观经验设置,本文通过与背景得分比较提取对应的proposal,不用阈值的另一篇文章是Shou Zheng的AutoLoc,通过 ...

  8. 通过Queue控制线程并发,并监控队列执行进度

    # -*- coding:utf-8 -*- import Queue import time import threading # 需要执行的业务主体 def domain(id): time.sl ...

  9. -UI调试工具 SAK 布局 MD

    目录 目录 SwissArmyKnife 接入方式 自动初始化版本 支持的功能 可配置项 原理 自定义功能 Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndro ...

  10. Windwos利用批处理文件自动清理归档日志,计划任务

    首先在X盘根目录建立一个文档  cmd.txt 打开cmd.txt这个文本文件,在里面第一行写入 DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-3'; ...