0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

sed工具丰富的功能介绍

阿铭linux 来源:阿铭linux 作者:阿铭 2022-12-02 09:38 次阅读

以前用vim操作文档的时候,可以查找也可以替换,但只限于在文本内部操作,而不能输出到屏幕上。sed工具以及后面要介绍的awk工具就能把替换的文本输出到屏幕上,而且还有其他更丰富的功能。

12.2.1打印某行

sed命令的格式为:sed -n 'n'p filename,单引号内的n是一个数字,表示第几行。-n选项的作用是只显示我们要打印的行,无关紧要的内容不显示。示例命令如下:

# sed -n '2'p /etc/passwd
bin1bin:/bin:/sbin/nologin
你可以去掉-n选项对比一下差异。要想把所有行都打印出来,可以使用命令sed -n '1,$'p filename,如下所示:
# sed -n '1,$'p test.txt
rot0/rot:/bin/bash
operator11operator:/root:/sbin/nologin
operator11operator:/rooot:/sbin/nologin
roooot0/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

当然,我们也可以指定一个区间打印,如下所示:

# sed -n '1,3'p test.txt
rot0/rot:/bin/bash
operator11operator:/root:/sbin/nologin
operator11operator:/rooot:/sbin/nologin

12.2.2打印包含某个字符串的行

示例命令如下:

# sed -n '/root/'p test.txt
operator11operator:/root:/sbin/nologin
这种用法就类似于grep了,在grep中使用的特殊字符(如^、$、.、*等)同样也能在sed中使用,如下所示:
# sed -n '/^1/'p test.txt
1111111111111111111111111111111
# sed -n '/in$/'p test.txt
operator11operator:/root:/sbin/nologin
operator11operator:/rooot:/sbin/nologin
# sed -n '/r..o/'p test.txt
operator11operator:/root:/sbin/nologin
operator11operator:/rooot:/sbin/nologin
roooot0/rooooot:/bin/bash
# sed -n '/ooo*/'p test.txt
operator11operator:/root:/sbin/nologin
operator11operator:/rooot:/sbin/nologin
roooot0/rooooot:/bin/bash

sed命令加上-e选项可以实现多个行为,如下所示:

# sed -e '1'p -e '/111/'p -n test.txt
rot0/rot:/bin/bash
1111111111111111111111111111111

12.2.3删除某些行

示例命令如下:

# sed '1'd test.txt
operator11operator:/root:/sbin/nologin
operator11operator:/rooot:/sbin/nologin
roooot0/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
# sed '1,3'd test.txt
roooot0/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
# sed '/oot/'d test.txt
rot0/rot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
这里参数d表示删除的动作,它不仅可以删除指定的单行以及多行,而且可以删除匹配某个字符的行,还可以删除从某一行开始到文档最后一行的所有行。

不过,这个操作仅仅是在显示器屏幕上并不显示这些行而已,文档还好好的,请不要担心。

12.2.4替换字符或者字符串

示例命令如下:

# sed '1,2s/ot/to/g' test.txt
rto0/rto:/bin/bash
operator11operator:/roto:/sbin/nologin
operator11operator:/rooot:/sbin/nologin
roooot0/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
上例中的参数s就表示替换的动作,参数g表示本行全局替换,如果不加g则只替换本行出现的第一个,这个用法其实和vim的替换大同小异。 除了可以使用/作为分隔符外,我们还可以使用其他特殊字符,例如#和@。如下所示:

# sed 's#ot#to#g' test.txt
rto0/rto:/bin/bash
operator11operator:/roto:/sbin/nologin
operator11operator:/rooto:/sbin/nologin
roooto0/rooooto:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
# sed 's@ot@to@g' test.txt
rto0/rto:/bin/bash
operator11operator:/roto:/sbin/nologin
operator11operator:/rooto:/sbin/nologin
roooto0/rooooto:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

现在思考一下:如何删除文档中所有的数字或者字母?示例命令如下:

# sed 's/[0-9]//g' test.txt
rot::/rot:/bin/bash
operator:/root:/sbin/nologin
operator:/rooot:/sbin/nologin
roooot::/rooooot:/bin/bash
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

[0-9]表示任意的数字。这里你也可以写成[a-zA-Z]或者[0-9a-zA-Z]。如下所示:

# sed 's/[a-zA-Z]//g' test.txt
:0:/://
:0::/://
:0::/://
:0:/://
1111111111111111111111111111111

12.2.5调换两个字符串的位置

示例命令如下:

# sed 's/(rot)(.*)(bash)/321/' test.txt
bash0/rot:/bin/rot
operator11operator:/root:/sbin/nologin
operator11operator:/rooot:/sbin/nologin
roooot0/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
小括号在sed中属于特殊符号,必须在前面加转义字符,替换时则写成类似1、2或3的形式。上例中用()把想要替换的字符打包成了一个整体。

有这个转义字符,会让这个表达式看起来乱糟糟的,阿铭有个方法可以省略它。如下所示:
# sed -r 's/(rot)(.*)(bash)/321/' test.txt
bash0/rot:/bin/rot
operator11operator:/root:/sbin/nologin
operator11operator:/rooot:/sbin/nologin
roooot0/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
没错,正如你看到的,就是这个-r选项让这个表达式更加清晰了,-r的作用跟grep的-E的作用是一样的,它让sed支持扩展正则,扩展正则其实就是使用了诸如:()、{}、|、+、?等特殊符号的正则。

除了调换两个字符串的位置,阿铭还常常用sed在某一行前后增加指定内容,如下所示:
# sed 's/^.*$/123&/' test.txt
123rot0/rot:/bin/bash
123operator11operator:/root:/sbin/nologin
123operator11operator:/rooot:/sbin/nologin
123roooot0/rooooot:/bin/bash
1231111111111111111111111111111111
123aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

12.2.6直接修改文件的内容

示例命令如下:

# sed -i 's/ot/to/g' test.txt
# cat test.txt
rto0/rto:/bin/bash
operator11operator:/roto:/sbin/nologin
operator11operator:/rooto:/sbin/nologin
roooto0/rooooto:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
这样就可以直接更改test.txt文件中的内容了。但必须注意,在修改前最好先备份一下文件,以免改错。 好了,我总结了这些,你看还有补充的么?





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 显示器
    +关注

    关注

    21

    文章

    4740

    浏览量

    137931
  • BIN文件
    +关注

    关注

    0

    文章

    25

    浏览量

    8173
  • grep
    +关注

    关注

    0

    文章

    22

    浏览量

    4681

原文标题:sed工具常见用法我总结了这些

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux中sed命令用法

    这篇文章为初学者提供了关于 Linux 中 sed 命令的全面指南,涵盖了其历史、用途以及一些实用的技巧和窍门。通过掌握 sed,您可以高效处理文本处理任务,这对于任何使用 Linux 的人来说都是一项宝贵的技能。
    发表于 07-21 10:38 234次阅读
    Linux中<b class='flag-5'>sed</b>命令用法

    液晶控制器SED1520与单片机mPSD3334D的接口及显示设计

    的应用前景。  ST公司的mPSD系列单片机以其接口功能强大、存储容量大和系统开发方便等优点,逐渐被应用到对功能要求较高的控制领域。其可编程逻辑的丰富外围接口和大容量存储器的使用必须通过
    发表于 08-29 18:17

    快速理解linux流编辑器sed命令

    之前介绍过 awk 命令,sed 命令同样是非常重要的文本处理工具,涉及到linux shell开发时,几乎是避不开这两大利器的sed 是 stream editor 的简写,是一种非
    发表于 11-30 10:44

    linux学习大全之sed 命令详解

    sed是Linux系统中一个很好的文件处理工具,可以对数据进行替换、删除、新增以及选取等操作,使用起来也十分方面,以下是全面的sed操作介绍sed
    发表于 01-12 15:20

    Linux的sed命令详解

    Linux命令大全 - sed命令
    发表于 03-13 16:25

    液晶控制器SED1520与单片机mPSD3334D简介

    强大、存储容量大和系统开发方便等优点,逐渐被应用到对功能要求较高的控制领域。其可编程逻辑的丰富外围接口和大容量存储器的使用必须通过PSDsoft? Express软件配置,与传统51系列单片机开发
    发表于 04-11 07:00

    SED的显示原理是什么?

    SED显示技术SED的基本显示原理同CRT相同,都是由电子撞击荧光材料而发光,但电子撞击的方式却不一样。
    发表于 09-27 09:01

    SED1335中文资料pdf

    SED1335 是日本SEIKO EPSON 公司出品的液晶显示控制器,它在同类产品中是功能最强的,其特点:1、较强功能的I/O 缓冲器;2、指令功能
    发表于 04-10 19:20 215次下载

    SED1335 控制器图形液晶显示模块使用手册

    前言 SED1335 的应用SED1335 是日本SEIKO EPSON 公司出品的液晶显示控制器它在同类产品中是功能最强的其特点1. 有较强功能的I/O 缓冲器2. 指令
    发表于 09-07 22:43 37次下载

    SED1520与PIC单片机的接口设计

    介绍了液晶显示驱动器 SED1520 的结构、编程指令,给出了其与PIC16F874 单片机接口的电路,并以内置SED1520 的液晶模块12232 为例介绍如何显示汉字,并给出显示部
    发表于 09-26 14:22 36次下载

    sed1335 c程序-源代码

    SED1335 是日本SEIKO EPSON 公司出品的液晶显示控制器,它在同类产品中是功能最强的,其特点:1、较强功能的I/O 缓冲器;2、指令功能
    发表于 04-11 09:37 1443次阅读

    SED显示技术,SED显示技术原理是什么?

    SED显示技术,SED显示技术原理是什么?     谈到平板显示技术,多数人可能只知道液晶和等离子,有人可能还知道有机发光
    发表于 03-27 11:56 3947次阅读

    表面传导电子发射显示器(SED)和场发射显示器(FED)的技术对比分析

    本文首先介绍了场发射显示器概念及原理发展,其次介绍了表面传导电子发射显示器(SED)工作原理及技术优势,最后介绍了FED和SED的相似性及区
    的头像 发表于 06-04 11:22 1.1w次阅读
    表面传导电子发射显示器(<b class='flag-5'>SED</b>)和场发射显示器(FED)的技术对比分析

    关于Linux中的sed简易介绍与工作原理

    熟悉 Linux 的同学一定知道大名鼎鼎的 Linux 三剑客,它们是 grep、awk、sed,我们今天要聊的主角就是 sed
    的头像 发表于 03-26 15:35 1998次阅读
    关于Linux中的<b class='flag-5'>sed</b>简易<b class='flag-5'>介绍</b>与工作原理

    sed用得少?sed常用语法简介

    sed简称流编辑器,即stream editor的缩写。sed是一个操作、过滤和转换文本内容的强大工具
    的头像 发表于 12-18 09:14 286次阅读