sed命令详解

  • 一、简介
  • 二、工作原理
  • 三、用法
    • 1.地址定界
    • 2.编辑命令
  • 四、实例及详解

一、简介

  • sed是一种新型的,非交互式的流式(从上往下读取一行处理一行)的编辑器
  • 可以执行vi和ex相同的编辑任务
  • 没有交互式的使用方式
  • 只能在命令行、使用命令、指定文件名、在屏幕上查看输出
  • sed编辑器没有破坏性,不会修改文件,除非使用shell重定向来保存输出结果,或者使用-i选项
  • 默认输出在屏幕上
  • 不能打开文件
  • 通常与正则表达式一块儿使用

二、工作原理

  • 逐行处理文件,输出到屏幕上
  • 把当前正在处理的行保存到一个临时缓冲区中
  • 缓冲区称为模式空间或者临时缓冲,模式空间中只能存放一行,一行一行处理
  • sed处理完一行后就会默认打印到屏幕上,除非有命令让它不打印或者删除该行
  • 当处理完文件的最后一行后,sed结束运行
  • sed会把输入文件的每一行都放在模式空间中
  • 对模式空间中的副本进行编辑
  • 所以不会修改或者破坏源文件

sed脚本的执行顺序

  • read读取一行到模式空间
  • execute在模式空间中执行命令,使用{}或者-e,依次执行每个命令
  • print打印模式空间的内容,清空模式空间
  • repeat重复上述过程,直到文件结束

三、用法

语法格式

sed  选项   命令  文本             (多个文本用空格隔开)
sed 选项  [界定/命令]  文本

常用选项

选项 说明
n 不输出模式空间中的内容至屏幕
e script 多点编辑
f 添加命令列表文件,此处的文件内容应为script类型
r 使用扩展正则表达式,不区分大小写
i 修改后的内容覆盖源文件

script:地址定界编辑命令

1.地址定界

用于决定对哪些行进行编辑,可以使数字,正则表达式,也可以一起使用,不指定的话处理全部行
空地址:输出全文
单地址:指定输出第几行
地址范围:#,#         第几行到第几行#,,/^root/   第几行到下面第一个以root开头的行#,+#     从第几行开始向下的几行/root/       模式匹配,编辑匹配到的行(此处使用可以正则表达式)$         最后一行
步进:1~2:所有奇数行2~2:所有偶数行

2.编辑命令

对地址界定匹配到的行进行处理
所有的编辑命令一次只能使用一个
p           打印
d           删除
a \text     在匹配行后面追加一个文本(写什么就是什么,不是文件内容),支持使用\n进行多行操作
i \text     在匹配行前插入,与a相似
c \text     替换/覆盖匹配到的行
w 文件名       将匹配到的行写入到文件中
r 文件名       将文件中的内容追加到匹配到的行之后
=          为匹配到的行打印行号
!            取反      除了所匹配到的行以外的所有行
地址界定!编辑命令        地址界定不是编辑命令字符含义和位置不同
s/1/2/      查找替换,其分隔符可以自行指定,s@@@,s###等替换标记      s/root/ROOT/#       #为替换标记g     全局替换w 文件名   将替换结果保存到指定文件中p      显示替换成功的行i       不区分大小写e     拼接shell命令n      替换匹配到行的第几个匹配内容          &       前面1匹配到的内容,一般放在2***替换标记有顺序,有e先e,其他无所谓

四、实例及详解

[root@localhost tmp]# cat file
/^root/ p
/^apache/ p
[root@localhost tmp]# sed -n -f file passwd
root:x:0:0:root:/root:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin此处的-f为添加命令列表文件
其中命令类型为script(地址界定/编辑命令)
即sed -n -f file passwd相当于sed -n '/^root/ p' passwd和sed -n '/^apache/ p' passwd
其中/^root/为地址界定中的模式匹配,使用正则表达式的行首锚定,意思是匹配以root开头的行
后面的 p 是编辑命令,输出到屏幕
[root@localhost tmp]# sed -n -e '/^root/ p' -e '/^apache/ p' passwd
root:x:0:0:root:/root:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologinsed 命令的-n选项不输出模式空间中的内容
-e多点编辑,在此处匹配到两行
p匹配到的内容输出到屏幕[root@localhost tmp]# sed -n '{
> /^root/p
> /^apache/ p
> }' /etc/passwd
root:x:0:0:root:/root:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin命令行的内容为sed -n '{       回车之后继续由键盘输入
>为提示符
在后面输入script类型
可以输入多个
最后以}' filename 结束
此处与sed -e 类似
[root@localhost tmp]# sed -n '1,10 s/root/ROOT/p' passwd
ROOT:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/ROOT:/sbin/nologin将passwd文件中的root全部用ROOT替换
此处的-n 是不输出模式空间中的内容
后面的p是输出匹配到的行
-n 与 p 一起使用只输出匹配到的行
不-n 与 p 一起使用,匹配到的行会在原来的行后面追加输出
但是它只是将含有root的行的第一个root给替换了,后面的没有变
可以在后面加上要替换的第几个去进行替换[root@localhost tmp]# sed -n '1,10 s/root/ROOT/2p' passwd
root:x:0:0:ROOT:/root:/bin/bash可以发现上面的第二行输出中只有一个root
没有找到第二个root,所以不输出
也可以使用 g 全局替换[root@localhost tmp]# sed -n '1,10 s/root/ROOT/gp' passwd
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
operator:x:11:0:operator:/ROOT:/sbin/nologin也可以使用正则表达式[root@localhost tmp]# cat file1
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
[root@localhost tmp]# sed 's/^.*/<&>/' file1
<101,John Doe,CEO>
<102,Jason Smith,IT Manager>
<103,Raj Reddy,Sysadmin>
<104,Anand Ram,Developer>
<105,Jane Miller,Sales Manager>直接用编辑命令s/ / / 没有地址界定默认全部文件
^表示行首锚定
.*表示任意长度任意字符
即匹配一整行
后面的<&>为修改后的内容
其中&表示前面匹配到的内容,就是^.*
命令意思就是将每行的行首加上< 行尾加上 >在替换中可以拼接shell命令[root@localhost tmp]# cat file6
/etc/passwd
[root@localhost tmp]# sed 's/^/ls -l /e' file6
-rw-r--r--. 1 root root 964 12月  3 14:40 /etc/passwd
[root@localhost tmp]# sed 's/^/cat /e' file6
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
……
其中的^是行首锚定
在这里就是在行首添加ls -l (l后面有空格)
e拼接shell命令
即将file6中的/etc/passwd作为参数使用ls -l 命令执行了一遍
[root@localhost tmp]# cat file3
wo shi yi zhi xiao agiao
[root@localhost tmp]# cat file2
1
12
123
1234
12345
123456
1234567
[root@localhost tmp]# sed -n '/7$/ w file4' file2
[root@localhost tmp]# cat file4
1234567将file2文件中的以7结尾的行保存到file4文件中[root@localhost tmp]# sed '3 r file3' file2
1
12
123
wo shi yi zhi xiao agiao
1234
12345
123456
1234567在file2文件的第三行后面追加file文件
也可以使用地址范围在多行后面追加[root@localhost tmp]# sed '3,5 r file3' file2
1
12
123
wo shi yi zhi xiao agiao
1234
wo shi yi zhi xiao agiao
12345
wo shi yi zhi xiao agiao
123456
1234567此处的w和r不能一起使用
[root@localhost tmp]# sed '/7$/i xxxyyy ' file2
1
12
123
1234
12345
123456
xxxyyy
1234567在以7结尾的行前面插入一行,内容为xxxyyy[root@localhost tmp]# sed '/7$/a xxxyyy ' file2
1
12
123
1234
12345
123456
1234567
xxxyyy 在以7结尾的行后面追加一行,内容为xxxyyy[root@localhost tmp]# sed   '/7$/c xxx  yyy ' file2
1
12
123
1234
12345
123456
xxx  yyy将以7结尾的行用xxx  yyy替换

Linux文本三剑客之sed相关推荐

  1. Linux文本三剑客之sed仗剑走天涯

    一,sed是什么? sed是Strem Editor(流编辑器)缩写,是操作.过滤和转换文本内容的强大工具.对文件内容逐行(行编辑器,一行读取一次,对行编辑)进行处理调用操作并显示到STDOUT,常用 ...

  2. linux 匹配文本中的ip,linux文本三剑客匹配网卡IP地址大PK(CentOS 7系统)

    运维工程师在做配置的过程中很多时候都需要去获取目标服务器网卡上的IP地址,那究竟用什么方式获取更便捷了,博主今天就带大家使用linux文本三剑客分别获取一下网卡的IP地址,最后我们再来对比一下. 实验 ...

  3. Linux文本三剑客--grep、sed、awk

    Linux文本三剑客–grep.sed.awk 文章目录 Linux文本三剑客--grep.sed.awk 1.grep 1.1什么是grep 1.2使用grep 命令格式 命令参数 基本正则表表达式 ...

  4. sed 插入多行_文本三剑客之sed

    文本三剑客之sed sed介绍 sed 简介 sed 流编辑器.sed的全称:Stream EDitor 简称sed 是个流编辑器,sed是一个行编辑器.首先它是个流编辑器是实现文本流编辑的,所谓行编 ...

  5. linux文本三剑客演讲稿,linux文本三剑客之grep

    grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正 ...

  6. Linux文本三剑客(grep、sed、awk)

    目录 grep 1.什么是grep和rgrep? 2.使用grep 2.1.命令格式 2.2.命令功能 2.3.命令参数 3.实战演示 sed 1.认识sed 2.使用sed 2.1.命令格式 2.2 ...

  7. Linux文本三剑客

    Linux下文本三剑客 正则表达式 文本三剑客Grep 文本三剑客Sed 文本三剑客Awk awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三 ...

  8. linux sed后 保存文本,实例详解linux文本三剑客--sed

    sed 简介 sed是一种流编辑器,以行为单位进行文本处理,可以将数据行进行替换.删除.新增.选取等操作. sed [options] 'command' file(s) 基本命令 匹配内容 $ se ...

  9. Linux文本三剑客之一——awk详解(1)——awk看这两篇就够啦~PS:文末有练习,来练练手吧

    shell编程三剑客 grep --> egrep --> 文本过滤 查询 awk 文本截取 sed  文本的替换和修改 目录 awk awk也可以做小数运算 awk命令简要处理流程 aw ...

最新文章

  1. matlab 罗盘图与羽毛图
  2. 总结基于ArcGIS Server 9.2 Dot Net ADF的WebGIS项目部署问题
  3. Ansi、Unicode、UTF8字符串之间的转换和写入文本文件
  4. 如何运行ruby代码
  5. cookie分号后面没有值_浏览器Cookie介绍
  6. python删除某个文件夹_Python 实现删除某路径下文件及文件夹
  7. 树状数组相关应用之平面范围求和问题
  8. 入手mac后,这5个技巧和窍门你应该知道
  9. 分享一个游戏源码、游戏服务端、下载网站
  10. java udp发送速率_项目总结22:Java UDP Socket数据的发送和接收
  11. android 选择 播放器,Android 播放--播放器里面 demo 类的说明与选择
  12. 适合自学的C语言基础视频教程
  13. 草图大师SketchUp pro 2018中文版
  14. 更改访问局域网win7计算机的用户,win7局域网共享设置 win7局域网共享设置方法...
  15. 真核有参转录组测序标准分析-3
  16. 我的CSDN博客十年
  17. python圣诞节祝福_Pyhton表白代码——浪漫圣诞节
  18. Android RGB颜色对照表
  19. php安全漏洞怎么修复,thinkphp漏洞如何修复
  20. 008.UG_NX自由曲面

热门文章

  1. sklearn随机森林模型:ValueError: Unknown label type: ‘unknown‘
  2. R语言ggplot2包和lattice包可视化改变x轴和y轴的显示位置实战
  3. R语言基于自定义函数构建xgboost模型并使用LIME解释器进行模型预测结果解释:基于训练数据以及模型构建LIME解释器解释一个iris数据样本的预测结果、LIME解释器进行模型预测结果解释并可视化
  4. python使用sklearn的PrecisionRecallDisplay来可视化PR曲线
  5. 影像组学视频学习笔记(27)-SimpleITK包介绍、Li‘s have a solution and plan.
  6. java操作excel常用的两种方式
  7. Python3学习笔记-字符串和编码
  8. Python基础总结(2)
  9. 图像拼接--Parallax-tolerant Image Stitching
  10. 分割候选区域--FastMask: Segment Multi-scale Object Candidates in One Shot