全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货  >  详情

Linux三剑客之-sed

来源:千锋教育
发布人:syq
2023-03-01

推荐

在线提问>>

  一、sed简介

  在Linux/UNIX系统中包含很多种类的文本处理器或文本编辑器,其中包括其中包括我们之前学习过的VIM 编辑器与grep 等。而 grep,sed,awk 更是Shell 编程中经常用到的文本处理工具, 被称之为Shell 编程三剑客。

  sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。

  sed也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于Shell脚本中,用以完成各种自动化处理任务。

  二、sed工作原理

  一行一行处理的

  当从文件中读取一行后,首先放到模式空间中对该行进行相应的处理,处理完将结果输出到屏幕上。然后继续读取下一行内容,直到所有行都读取完毕,sed结束。

15

  三、sed基本使用

16

  选项:

  -n:静默输出,关闭模式空间的输出,不会输出未匹配到的行 一般与p命令结合使用

  -e:允许进行多项编辑,也就是说对同一行做多次处理、. 可以做多点编辑

  -e '动作1' -e '动作2' == '动作1;动作2'

  -f:后接sed脚本,指定执行的sed脚本(将模式动作写到文件中)

  -r:允许使用扩展正则

  -i:直接作用于原文件 没有输出 在使用-i之前一定先不加-i看看效果

  -i.bak:修改原文件之前进行备份

  模式:

  1.空模式,表示所有的行都执行动作

  2.以行号作为模式

  1). 单独的行号

  如:1 就是处理第1行

  $ 处理最后一行

  2). 起始行,结束行

  如:1,5 处理第1到5行

  3). 起始行~步长

  每隔多少行操作一次

  如:2~2 从第2行开始,每隔1行

  4). 起始位置,+N

  表示从起始位置开始,后面的N行都进行处理

  如:3,+5 处理3-8行

  3.以正则作为模式

  1). /正则表达式/

  如:/^root/

  2). /正则表达式1/,/正则表达式2/

  表示从第一次匹配到正则表达式1开始到第一次匹配到正则表达式2之间的所有行

  如:/^bin/,/sh$/

  动作-----处理命令: ! 非 : 放在命令前面表示取反

  d 删除 delete

  p 打印 print

  r 读取 read

  w 写 write

  a 追加 在匹配的行下面插入内容 append

  i 插入 在匹配行的上一行插入内容 insert

  c 修改 本行替换 change

  y 转换的命令,一一对应转换

  n 处理下一行 next

  q 退出,不会再向模式空间读入新的行 quit

  s 查找替换

  '模式s/旧的内容(正则表达式)/替换内容(新的内容)/[修饰符]'

  修饰符:

17

  四、随堂案例

  sed的内容非常多,虽然有些复杂,但是在工作中用的非常多,可以给我们工作中带来很多便利,下面我们看到几个案例

  1.从以root开头的行,到以login结尾的行,将sbin替换为bin (/etc/passwd文件或其一部分)

  sed -r -n '/root/,/login/s/sbin/bin/p' /etc/passwd

  2.将格式为2014/08/17的日期,替换为2023; 02; 02这样的格式(注意:分号后面有空格)

  date +"%Y/%m/%d"|sed 's/\//; /g'

  3.将pass文件每行打印3次

  sed 'p;p;' /tmp/pass

  4.打印pass文件的第1行和第3行

  sed -n '1p;3p;' /tmp/pass

  5.删除pass文件的第一行和最后一行

  sed '1d;$d' pass

  6.删除pass文件中所有的数字

  sed -r 's/[0-9]*//g' pass

  五、结言

  同学们,今天的Linux三剑客之sed就学到这里,各位同学们一定要勤加练习.

相关文章

java异常分类三大类是什么?

常用的maven打包命令有哪些?

article标签是什么元素?有什么作用

js引用数据类型有哪些

什么是枚举?没有枚举之前怎么做的

开班信息 更多>>

课程名称
全部学科
咨询

HTML5大前端

Java分布式开发

Python数据分析

Linux运维+云计算

全栈软件测试

大数据+数据智能

智能物联网+嵌入式

网络安全

全链路UI/UE设计

Unity游戏开发

新媒体短视频直播电商

影视剪辑包装

游戏原画

    在线咨询 免费试学 教程领取