提到 sed 命令,就不得提到 Sed 工具。Sed(stream editor)是一种非交互式的流编辑器,通过多种转换修改流经它的文本。

首先,Sed 通过文件或管道读取文件的内容,在默认情况下,Sed 并不会修改原文件的本身,而是将读入的内容复制到缓冲区中,也称为模式空间。所有的操作指令都是在模式空间中进行的,随后 Sed 根据相应的指令对模式空间中的内容进行处理并输出结果,默认输出到屏幕上。

Sed 工作的流程如图 1 所示。

图 1 Sed工作流程图

Sed 处理文本时是以行为单位的,每处理完一行就立即打印出来,然后再处理下一行,直至全文处理结束。Sed 可做的编辑动作包括删除、查找替换、添加、插入、从其他文件中读入数据等。

注意,要想保存修改后的文件,必须使用重定向生成新的文件。如果想直接修改源文件本身则需要使用“-i”参数。

sed 命令通常在以下场景中使用:

常规编辑器编辑困难的文本。

过于庞大的文本,使用常规编辑器难以胜任(如一个几百兆的文件)。

有规律的文本修改,加快文本处理速度(如全文替换)。

sed 的基本语法格式如下:

[root@bogon ~]# sed [选项] {脚本指令} [输入文件]

sed 常用的选项及各自的功能如表 2所示。

表 2 sed常用选项及功能

选 项

功 能

-n

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

-e

直接在命令行模式上进行 sed 的动作编辑

-f

直接将 sed 的动作写在一个文件内,-f filename 则可以运行 filename 内的 sed 动作

-r

sed 的动作支持的是扩展型正规表示法的语法。(默认的是基础正规表示法语法)

-i

直接修改读取的文件内容,而不是输出到屏幕

sed 通过特定的脚本指令对文件进行处理,常用脚本指令及功能如表3  所示。

表 3 sed常用脚本指令及功能

脚本指令

功 能

a

增加,a 的后面可以接字符串,而这些字符串会在新的一行出现(当前的下一行)

c

替换,c 之后的字符串将会替换规定行之间的所有行

d

删除,删除指定的行

i

插入,在指定行的前面进行插入

l

打印,显示非打印字符

L

打印,不显示非打印字符

p

打印,将某个选择的数据打印出来。通常跟参数 -n —起运行

q

退出

r

读入文件内容

s

替换,用一个字符串替换另一个,注意与 c 的区别

w

保存至文件

y

按字符转换

【例 1】sed脚本指令:添加。

首先创建一个样本文件命名为 text,在样本文件中写入如下内容:

hello world

h1helloh1

h2helloh2

h3helloh3

把 text 样本文件的内容通过 sed 脚本进行添加,即把 text 文件中的第一个 h1,h2 和 h3 添加上“<>”;第一个 h1,h2 和 h3 添加上“>”。

使用 touch 命令创建一个脚本文件,命名为 sed.sh。打开脚本文件 sed.sh,写入如下内容:

/h[0-9]/{

s//\/1

s//\/2

}

在终端页面输入如下命令:

[root@bogon ~]# sed –f sed.sh text

hello world

hello

hello

hello

Sed的高级用法

Sed 工具还提供了一些高级特性,允许处理跨多行的文本模式。

1) 加倍行间距

加倍文本内容的行间距主要在于保持空间的默认值。通常使用G命令将保持空间的内容附加到模式空间内容中,当使用 Sed 工具时,保持空间只有一个空行,将它附加到已有行的后面即可创建一个空白行。

【例 2】在样本文件 text 中插入空白行。

创建一个名为 text 的样本文件,在其中写入如图下内容:

hello

在终端页面输入如下命令:

[root@bogon ~] # sed 'G' text

hello

可以看出,在文件的末尾处也产生了一个空白行,如果不想要这个空白行,可以使用排出符号“!”和尾行符号“$”来确保空白行不加在最后一行,如下所示:

hello

2) 使用等号“=”显示数据流中行的行号

【例 3】显示数据流中行的行号。

使用例 2 中 text 样本文件的内容,在终端页面输入如下命令:

[root@bogon ~] # sed '=' text

1

2

hello

3

4

还可以将行号和文本放在同一行。在使用等号命令输出之后,通过管道将输出传给另一个 sed 脚本,再使用 N 命令来合并这两行,最后使用替换命令将换行符更换成空格或制表符。

在终端页面输入如下命令:

[root@bogon ~]# sed '=' text | sed 'N; s/\n/ /'

1

2

hello

3

hello world

4

注意,Next(N)指令通过读取新的输入行,并将它追加至模式空间的现有内容之后,来创建多行模式空间。模式空间的最初内容与新的输入行之间用换行符分隔,在模式空间中插入的换行符可以使用“\n”匹配。

3) 多行删除操作(D)

d 指令为删除指令,其作用是删除模式空间中的内容并读入新的输入行,如果 sed 在 d 指令后还有多条指令,则余下的指令将不再执行,而是返回第一条指令对新读入行进行处理。

而多行删除指令 D 将删除模式空间中直到第一个插入的换行符(\n)前的内容,它不会读入新的输入行,并返回 sed 脚本的顶端,使得剩余指令继续应用于模式空间中剩余的内容。

【例 4】显示数据流中行的行号。

创建一个名为 text 的样本文件,在样本文件中写入如下内容:

hello

http://www.weixueyuan.net

123456

abcdef

在终端页面输入如下命令:

[root@bogon ~]# nl text | sed '1d;5d'

1

2

hello

3

hello world

4

5  http://www.weixueyuan.net

6  123456

7  abcdef

【例 5】删除 HTML 标签。标准的 HTML Web 页面包含一些不同类型的 HTML 标签。HTML 标签由小于号和大于号来识别。大部分 HTML 标签都是成对出现的:一个起始标签和一个结束标签。

创建一个样本文件命名为 text,在样本文件中写入如下内容:

hello

hello world

12345

在终端页面输入如下命令:

[root@bogon ~]# sed 's/]*//g' text

hello

hello world

123456

可以看出,HTML 标签已经被删除,但还有多余的空白行。因此可以加入删除命令来删除多余的空白行。命令如下:

[root@bogon ~]# sed 's/]*>//g; /^$/d' text

hello

hello world

123456

linux sed 命令,Linux sed命令用法详解相关推荐

  1. linux中替换命令详解,linux中sed命令字符串替换的用法详解

    Linux系统中sed命令可以将字符串批量替换,省去了很多麻烦,下面由学习啦小编为大家整理了linux系统中sed命令字符串替换的用法详解,希望对大家有帮助! linux中sed命令字符串替换的用法详 ...

  2. linux cp -r 参数,Linux系统中cp命令的参数及用法详解

    Linux系统中cp命令主要是用来复制文件或者目录.下面由学习啦小编为大家整理了Linux系统中cp命令的参数及用法详解的相关知识,希望对大家有帮助! Linux系统中cp命令的参数及用法详解:参数说 ...

  3. npm命令--安装依赖包--用法/详解

    原文网址:npm命令--安装依赖包--用法/详解_IT利刃出鞘的博客-CSDN博客 简介 本文介绍npm如何安装依赖包. 用法 命令 作用 详述 npm install <pkg> //同 ...

  4. python getopt argparse_python OptParse模块和argparse命令行解析的用法详解

    https://www.cnblogs.com/wj-1314/p/8974021.html OptParse模块的简单介绍 Python 有两个内建的模块用于处理命令行参数: 一个是 getopt只 ...

  5. Linux下安全扫描工具Nmap用法详解

    扫描器是一种能够自动检测主机安全性弱点的程序.扫描器通过发送特定的网络数据包,记录目标主机的应答消息,从而收集关于目标主机的各种信息.目前网络上有很多扫描软件,比较著名的扫描器有SSS,X-Scan, ...

  6. linux进程间通信之Posix共享内存用法详解及代码举例

    Posix共享内存有两种非亲缘进程间的共享内存方法: 1).  使用内存映射文件,由open函数打开,再由mmap函数把返回的文件描述符映射到当前进程空间中的一个文件. 2). 使用共享内存区对象,由 ...

  7. linux中grep命令 菜鸟教程,linux grep正则表达式与grep用法详解

    需要大家牢记:正则表达式与通配符不一样,它们表示的含义并不相同 正则表达式只是字符串的一种描述,只有和支持正则表达式的工具相结合才能进行字符串处理.本文以grep为例来讲解正则表达式. grep命令 ...

  8. linux mount命令参数及用法详解

    linux mount命令参数及用法详解 非原创,主要来自 http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml. htt ...

  9. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)

    linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...

  10. Linux Shell脚本入门--wget 命令用法详解

    Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...

最新文章

  1. xcode 4.2 不再支持 Window-Based Application 的解决办法(转载)
  2. 新金融 新生态 银行高管热议互联网金融
  3. 第六周项目二-带武器的游戏角色
  4. ug二次开发菜单中文乱码_平面用cad,三维用Ug,不服来怼!
  5. 动态规划应用--最长递增子序列 LeetCode 300
  6. matlab 简单的图像填充例子
  7. 为什么我的devc 调试不了c 语言,devc++为什么调试不了,求大神帮看看!
  8. android horizontalscrollview 固定宽度,Android HorizontalScrollView 内容宽度
  9. Java成员变量调用方法赋值问题
  10. 织梦DedeCMS标签全攻略,织梦DedeCMS标签大全
  11. 【读报告】基于物联网技术的道岔转换设备检测专家平台的研究 研制报告
  12. 1.网络安全之windows系统知识
  13. 三菱伺服电机编码器故障判断方法
  14. 科研绘图之R语言生存分析KM曲线累计风险表放在图片内部
  15. 绿色工厂的企业应具备的基本条件
  16. Golang postgres.go:45:3: unknown field ‘WithReturning‘ in struct literal of type....
  17. 字符串函数的使用和剖析(三)
  18. 开关电源雷击浪涌整改_开关电源之雷击浪涌大解剖
  19. Bochs使用笔记(Bochs虚拟机下安装DOS 6.22)
  20. excel表格打开灰色,没有内容

热门文章

  1. 2022焊工(初级)特种作业证考试题库模拟考试平台操作
  2. 信号反射的几个基本问题分析
  3. 巧记易混单词:ingenious和ingenuous
  4. 全网首发,一篇文章带你走进pycharm的世界----别再问我pycharm的安装和环境配置了!!!万字只为君一笑,赶紧收藏起来吧
  5. Android点击一次按钮,布局显示,第二次点击,布局消失;点一次出现,再点一次消失逻辑。
  6. 笔记本电脑那种适合学计算机,什么样的电脑适合学生?挑选笔记本的技巧
  7. web前端--用div替代frameset和frame
  8. 对捷某特app的逆向
  9. 解决生意参谋中transit-id参数、data数据与指数还原
  10. Sketch使用教程(二)