一、sed格式命令

  1. sed 命令行格式为:sed [选项] 'command' 输入文本

二、sed命令的选项

  1. sed [选项] [动作]
  2.  
  3. 选项与参数:
  4. -n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
  5. -e :直接在命令列模式上进行 sed 的动作编辑;
  6. -f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
  7. -r sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
  8. -i :直接修改读取的文件内容,而不是输出到终端。
  1. 功能说明:
  2. a :新增行, a 的后面可以是字串,而这些字串会在新的一行出现(目前的下一行)
  3. c :取代行, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
  4. d :删除行,因为是删除,所以 d 后面通常不接任何参数,直接删除地址表示的行;
  5. i :插入行, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  6. p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
  7. s :替换,可以直接进行替换的工作,通常这个 s 的动作可以搭配正规表示法,例如 1,20s/old/new/g 一般是替换符合条件的字符串而不是整行
  8.  
  9. 一般function的前面会有一个地址的限制,例如 [地址]function,表示我们的动作要操作的行。下面我们通过具体的例子直观的看看sed的使用方法。

三、Sed定位

Sed命令在没有给定的位置时,默认会处理所有行;

Sed支持以下几种地址类型:

1、first        ----          step

这两个单词的意思:first 指起始匹配行,step指步长,例如:sed -n 2~5p 含义:从第二行开始匹配,隔5行匹配一次,即2,7,12.。。。。

2、$

这个$符表示匹配最后一行。

3、/REGEXP/

这个是表示正则那一行,通过//之间的正则来匹配

4、\cREGEXPc

这个是表示匹配正则那一行,通过\c和c之间的正则来匹配,c可以是任意字符

5、 addr1, add2
定址 addr1, add2 决定用于对哪些行进行编辑。地址的形式可以是数字、正则表达式或二者的结合。如果没有指定地址, sed 将处理输入文件中的所有行。如果定址是一个数字,则这个数字代表行号,如果是逗号分隔的两个行号,那么需要处理的定址就是两行之间的范围(包括两行在内)。范围可以是数字,正则或二者组合。

6、 addr1, +N

从 addr1 这行到往下 N 行匹配,总共匹配 N+1 行

四、Sed的正则表达式

                               表 1: sed 的正则表达式元字符

元字符 功 能 示 例 示例的匹配对象
^ 行首定位符 /^love/ 匹配所有以 love 开头的行
$ 行尾定位符 /love$/ 匹配所有以 love 结尾的行
. 匹配除换行外的单
个字符
/l..e/ 匹配包含字符 l、后跟两个任意
字符、再跟字母 e 的行
* 匹配零个或多个前
导字符
/*love/ 匹配在零个或多个空格紧跟着
模式 love 的行
[] 匹配指定字符组内
任一字符
/[Ll]ove/ 匹配包含 love 和 Love 的行
[^] 匹配不在指定字符
组内任一字符
/[^A-KM-Z]ove/ 匹配包含 ove,但 ove 之前的那
个字符不在 A 至 K 或 M 至 Z 间
的行
\(..\) 保存已匹配的字符
& 保存查找串以便在
替换串中引用
s/love/**&**/ 符号&代表查找串。字符串 love
将替换前后各加了两个**的引
用,即 love 变成**love**
\< 词首定位符 /\<love/ 匹配包含以 love 开头的单词的
\> 词尾定位符 /love\>/ 匹配包含以 love 结尾的单词的
x\{m\} 连续 m 个 x /o\{5\}/ 分别匹配出现连续 5 个字母 o、
至少 5 个连续的 o、或 5~10 个
连续的 o 的行
x\{m,\} 至少 m 个 x /o\{5,\}/
x\{m,n\} 至少 m 个 x,但不
超过 n 个 x
/o\{5,10\}/

表 2.sed 的常用选项

选项 说明
-n 使用安静模式,在一般情况所有的 STDIN 都会输出到屏幕上,加入-n 后只打印
被 sed 特殊处理的行
-e 多重编辑,且命令顺序会影响结果
-f 指定一个 sed 脚本文件到命令行执行,
-r Sed 使用扩展正则
-i 直接修改文档读取的内容,不在屏幕上输出

五、Sed 操作命令

sed 操作命令告诉 sed 如何处理由地址指定的各输入行。如果没有指定地址, sed 就会处理输入的所有的行。表 3.sed 命令

命 令 说 明
a\ 在当前行后添加一行或多行
c\ 用新文本修改(替换)当前行中的文本
d 删除行
i\ 在当前行之前插入文本
h 把模式空间里的内容复制到暂存缓存区
H 把模式空间里的内容追加到暂存缓存区
g 取出暂存缓冲区里的内容,将其复制到模式空间,覆盖该处原有内容
G 取出暂存缓冲区里的内容,将其复制到模式空间,追加在原有内容后面
l 列出非打印字符
p 打印行
n 读入下一输入行,并从下一条命令而不是第一条命令开始处理
q 结束或退出 sed
r 从文件中读取输入行
对所选行意外的所有行应用命令
s 用一个字符串替换另一个

表 4.替换标志

g 在行内进行全局替换
p 打印行
w 将行写入文件
x 交换暂存缓冲区与模式空间的内容
y 将字符转换为另一字符(不能对正则表达式使用 y 命令)

 六、sed使用实例

  1. 数据准备
  2. northwest NW Charles Main 3.0 .98 3 34
  3. western WE Sharon Gray 5.3 .97 5 23
  4. southwest SW Lewis Dalsass 2.7 .8 2 18
  5. southern SO Suan Chin 5.1 .95 4 15
  6. southeast SE Patricia Hemenway 4.0 .7 4 17
  7. eastern EA TB Savage 4.4 .84 5 20
  8. northeast NE AM Main Jr. 5.1 .94 3 13
  9. north NO Margot Weber 4.5 .89 5 9
  10. central CT Ann Stephens 5.7 .94 5 13

1、打印:p命令

命令p是打印命令,用于显示模式缓存区的内容。默认情况下,sed把输入行打印在屏幕上,选项-n用于取消默认打印操作。当选项-n和命令p同时出现时,sed可打印选定的内容

案例一:当仅仅出现p打印命令时,sed 把所有输入行都打印在标准输出上。如果在某一行匹配到 north, sed就把该行另外打印一遍(如红色标记)。

  1. [root@master mnt]# sed '/north/p' sedTest.txt
  2. northwest NW Charles Main 3.0 .98 3 34
  3. northwest NW Charles Main 3.0 .98 3 34
  4. western WE Sharon Gray 5.3 .97 5 23
  5. southwest SW Lewis Dalsass 2.7 .8 2 18
  6. southern SO Suan Chin 5.1 .95 4 15
  7. southeast SE Patricia Hemenway 4.0 .7 4 17
  8. eastern EA TB Savage 4.4 .84 5 20
  9. northeast NE AM Main Jr. 5.1 .94 3 13
  10. northeast NE AM Main Jr. 5.1 .94 3 13
  11. north NO Margot Weber 4.5 .89 5 9
  12. north NO Margot Weber 4.5 .89 5 9
  13. central CT Ann Stephens 5.7 .94 5 13
  14. [root@master mnt]# sed -n '/north/p' sedTest.txt
  15. northwest NW Charles Main 3.0 .98 3 34
  16. northeast NE AM Main Jr. 5.1 .94 3 13
  17. north NO Margot Weber 4.5 .89 5 9

案例二:当p打印命令和n同时出现时

说明:默认情况下, sed 打印当前缓存区中的输入行。命令 p 指示 sed 将再次打印该行。选项-n 取消 sed 取消默认打印操作。选项-n 和命令配合使用,模式缓冲区内的输入行,只被打印一次。如果不指定-n 选项, sed 就会像上例中那样,打印出重复的行。如果指定了-n,则sed 只打印包含模式 north 的行。

  1. [root@master mnt]# sed -n '/north/p' sedTest.txt
  2. northwest NW Charles Main 3.0 .98 3 34
  3. northeast NE AM Main Jr. 5.1 .94 3 13
  4. north NO Margot Weber 4.5 .89 5 9

2、删除:d命令

命令d用于删除输入行。sed先将输入行从文件复制到缓存区,然后对该行执行sed命令,最后将模式缓存区的内容显示在屏幕上。如果发出的是命令d,当前模式缓存区的输入行会被删除,不被显示。但是在文件中该行是没有被删除的。

案例三:

删除第 3 行。默认情况下,其余的行都被打印到屏幕上。

  1. [root@master mnt]# sed '3d' sedTest.txt
  2. northwest NW Charles Main 3.0 .98 3 34
  3. western WE Sharon Gray 5.3 .97 5 23
  4. southern SO Suan Chin 5.1 .95 4 15
  5. southeast SE Patricia Hemenway 4.0 .7 4 17
  6. eastern EA TB Savage 4.4 .84 5 20
  7. northeast NE AM Main Jr. 5.1 .94 3 13
  8. north NO Margot Weber 4.5 .89 5 9
  9. central CT Ann Stephens 5.7 .94 5 13

案例4:

删除从第三行到最后一行内容,剩余各行被打印。地址范围是开始第 3 行,结束最后一行。

  1. [root@master mnt]# sed '3,$d' sedTest.txt
  2. northwest NW Charles Main 3.0 .98 3 34
  3. western WE Sharon Gray 5.3 .97 5 23

案例5:所有包含模式 north 的行都被动删除,其余行被打印。

  1. [root@master mnt]# sed '/north/d' sedTest.txt
  2. western WE Sharon Gray 5.3 .97 5 23
  3. southwest SW Lewis Dalsass 2.7 .8 2 18
  4. southern SO Suan Chin 5.1 .95 4 15
  5. southeast SE Patricia Hemenway 4.0 .7 4 17
  6. eastern EA TB Savage 4.4 .84 5 20
  7. central CT Ann Stephens 5.7 .94 5 13

3、替换:s命令

命令 s 是替换命令。替换和取代文件中的文本可以通过 sed 中的 s 来实现, s 后包含在斜杠中的文本是正则表达式,后面跟着的是需要替换的文本。可以通过 g 标志对行进行全局替换
案例 6:

s 命令用于替换。命令末端的 g 表示在行内全局替换;也就是说如果每一行里出现多个west,所有的 west 都会被替换为 north。如果没有 g 命令,则只将每一行的第一 west 替换为 north。

  1. [root@master mnt]# sed 's/west/north/g' sedTest.txt
  2. northnorth NW Charles Main 3.0 .98 3 34
  3. northern WE Sharon Gray 5.3 .97 5 23
  4. southnorth SW Lewis Dalsass 2.7 .8 2 18
  5. southern SO Suan Chin 5.1 .95 4 15
  6. southeast SE Patricia Hemenway 4.0 .7 4 17
  7. eastern EA TB Savage 4.4 .84 5 20
  8. northeast NE AM Main Jr. 5.1 .94 3 13
  9. north NO Margot Weber 4.5 .89 5 9
  10. central CT Ann Stephens 5.7 .94 5 13

案例7:

:s 命令用于替换。选线-n 与命令行末尾的标志 p 结合,告诉 sed 只打印发生替换的那些行;也就是说,如果只有在行首找到 west 并替换成 north 时才会打印此行。

  1. [root@master mnt]# sed -n 's/^west/north/p' sedTest.txt
  2. northern WE Sharon Gray 5.3 .97 5 23

Linux sed 命令总结的更多相关文章

  1. linux sed命令参数及用法详解

    linux sed命令参数及用法详解 http://blog.csdn.net/namecyf/article/details/7336308 1. Sed简介 sed 是一种在线编辑器,它一次处理一 ...

  2. [转帖]linux sed命令

    linux sed命令就是这么简单 https://www.cnblogs.com/wangqiguo/p/6718512.html 用到的最多的就是一个sed -i 's/nn/mm/' 的命令了. ...

  3. 理解linux sed命令

    理解linux sed命令(2010-02-27 18:21:20) 标签:linuxshellsed替换 分类:革命本钱 1. Sed简介sed是一种在线编辑器,它一次处理一行内容.处理时,把当 前 ...

  4. 【转】linux sed命令

    转自:linux sed命令就是这么简单 参考:Linux三大剑客之sed:https://blog.csdn.net/solaraceboy/article/details/79272344 阅读目 ...

  5. Linux sed命令 以行为单位编辑文本,或替换文本中的文字

    sed -e 4a\newLine testfile 首先查看testfile中的内容如下: $ cat testfile #查看testfile 中的内容 HELLO LINUX! Linux is ...

  6. Linux sed命令使用方法

    sed(Stream Editor)是Linux中文本处理使用非常广泛的工具,可以对文件内容进行替换.删除.新增.选取特定行等功能.下面通过sed常用实例介绍sed命令的使用方法. sed基本语法 s ...

  7. linux sed命令(擅长输出行)(转)

    linux命令总结sed命令详解 Sed 简介 sed 是一种新型的,非交互式的编辑器.它能执行与编辑器 vi 和 ex 相同的编辑任务.sed 编辑器没有提供交互式使用方式,使用者只能在命令行输入编 ...

  8. linux sed命令详解

    简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...

  9. linux sed命令

    一.初识sed 在部署openstack的过程中,会接触到大量的sed命令,比如 # Bind MySQL service to all network interfaces. sed -i 's/1 ...

  10. Linux sed命令实例详解

    简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...

随机推荐

  1. 第15.23节 PyQt(Python+Qt)入门学习:Model/View架构中QListView视图配套Model的开发使用

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 QListView理论上可以和所有QAbstractItemModel派生的类如QStri ...

  2. Java 8 中的方法引用,轻松减少代码量,提升可读性!

    1. 引言 Java8中最受广大开发中喜欢的变化之一是因为引入了 lambda 表达式,因为这些表达式允许我们放弃匿名类,从而大大减少了样板代码,并提高了可读性. 方法引用是lambda表达式的一种特 ...

  3. mysql游标cursor与for循环

    delimiter // create procedure p2() begin declare row_id int DEFAULT 0; declare row_num int DEFAULT 0 ...

  4. Pytorch训练时显存分配过程探究

    对于显存不充足的炼丹研究者来说,弄清楚Pytorch显存的分配机制是很有必要的.下面直接通过实验来推出Pytorch显存的分配过程. 实验实验代码如下: import torch from torch ...

  5. (原创)nginx反向代理上网,使docker可以拉取镜像

    转载请注明出处:饭饭博客:https://www.cnblogs.com/zzf0305/p/9602107.html 摘语:参考了N多大侠的资料,终于将自己的环境配置起来了.站在众多巨人的肩膀进行总 ...

  6. STL—— 容器(vector)的数据插入之 insert()

    vector 容器可以使用 vectorName.insert() 方法插入元素,vectorName.insert() 函数一共有4种重载方法: 第一种 insert() 用法:在指定地址插入单个元 ...

  7. CSS3全览_文本+视觉+盒子+背景颜色

    CSS全览_文本+视觉+盒子+背景颜色 目录 CSS全览_文本+视觉+盒子+背景颜色 1. 文本属性 2. 视觉格式化基础 3. 内边距, 边框, 轮廓和外边距 4. 颜色, 背景和渐变 作者: ht ...

  8. MySQL全备及备份文件删除脚本

    1.数据库全备 #!/bin/shv_user="root"v_password="mysql"backup_date=`date +%Y%m%d%H%M` M ...

  9. C#跳过工作日,计算几个工作日之后到期的方法

    需求:消费者投诉企业,企业在2个工作日之内做出应答. 分析:1.工作日要刨去周末和法定节假日,而且每年的节假日不一样. 2.消费者可以在任意时间发起投诉,如果在非工作日发起了投诉,那么计算时间应该从工 ...

  10. [打基础]OI/ACM基本功&一些小功能的实现&一些错误(持续更新)

    基本功 前导0 如题,有时候需要把3输出成03这样子,可以调用 cout.width(x); ,x表示以几位,用 cout.fill(x); 来给出前导填充的内容,一般x以char的形式给出 例如可以 ...