命令简介

sed(Stream Editor)被称作流编辑器。linux命令环境的“三剑客”(grep,sed,awk)之一,功能强大,可以根据命令来处理数据流中的数据,命令可以在命令行中,也可以出现在一个文本文件中。

sed一般会执行下列操作:

①一次从输入中读取一行数据;

②根据所提供的编辑器命令匹配数据;

③按照命令修改流中的数据;

④将新的数据输出到STDOUT(屏幕上);

在流编辑器将所有命令与一行数据匹配完毕后,它会读取下一行数据并重复这个过程。在流编辑器处理完流中的所有数据行后,它就会终止。

必备知识

正则表达式

速记参考:http://man.linuxde.net/docs/shell_regex.html

测试环境

CentOS 7.x

具体实例

说明:以下例子来自网络整理,可能某些问题用sed并非简便,此处拿来仅供学习,实际匹配操作根据不同文本文件环境做轻微调整,主要涉及到了常见的实用操作(打印、删除、替换、交换、提取等)。

打印

1. 打印第一行

~]# sed -n '1p' passwd

2. 打印最后一行

~]# sed -n '$p' passwd

3. 打印第三行

~]# sed -n '3p' passwd

4. 打印第三行到第八行

~]# sed -n '3,8p' passwd

5. 打印第三行和第5行

~]# sed -n '3p;5p' passwd

6. 打印第三行和第五号到第八行

~]# sed -n '3p;5,8p' passwd

7. 打印奇数行

~]# sed -n 'p;n' passwd

8. 打印偶数行

~]# sed -n 'n;p' passwd

9. 打印每行3次

~]# sed 'p;p' passwd
~]# sed -n 'p;p;p' passwd

10. 打印以mail开始的行

~]# sed -n '/^mail/p' passwd

删除(一般删除)

1. 删除空白行(打印非空行)

~]# sed '/^$/d' passwd
~]# grep -v "^$" passwd
~]# awk '{if($0!="") print}' passwd
~]# awk '{if(length!=0) print}' passwd
~]# cat passwd |tr -s '\n'

2. 删除第二行

~]# sed '2d' passwd

3. 删除第二行到第五行

~]# sed '2,5d' passwd

4. 删除第二行和第五行到第八行

~]# sed '2d;5,8d' passwd

5. 删除最后一行

~]# sed '$d' passwd

6. 删除奇数行

~]# sed '1d;n;d' passwd
~]# sed '1~2d' passwd

7. 删除偶数行

~]# sed '2d;n;d' passwd
~]# sed '2~2d' passwd

删除(替换思想)

1. 删除每行开头的所有空格

~]# sed 's/^ *//' passwd
~]# sed 's/^\ *//' passwd
~]# sed -r 's/( *)(.*)/\2/' passwd

2. 删除每行第一个字符

~]# sed  's/.//'  passwd
~]# sed  's/^.//g'  passwd
~]# sed  -r 's/(.)(.*)/\2/'  passwd

3. 删除每行最后一个字符

~]# sed 's/.$//'  passwd
~]# sed -r 's/(.*)(.)/\1/'  passwd

4. 删除每行第四个字符

~]# sed 's/.//4' passwd

5. 删除每行倒数第二个字符

~]# sed -r 's/(.*)(.)(.)/\1\3/' passwd

6. 删除所有的数字

~]# sed -r 's/[0-9]*//g' passwd
~]# sed -r 's/[0-9]//g' passwd

7. 删除每行第二个单词

~]# sed -r 's/([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)(.*)/\1\2\4\5/'  passwd
~]# sed -r 's/([^a-Z]*)([a-Z]+)([^a-Z]+)([a-Z]+)(.*)/\1\2\3\5/'  passwd
~]# sed -r 's/(^[^a-Z]*)([a-Z]+)([^a-Z]+)([a-Z]+)/\1\2\3/'  passwd

8. 删除每行倒数第二个单词

~]# sed -r 's/(.*)([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]*)/\1\2\4\5\6/'  passwd
~]# sed -r 's/([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]*)$/\1\3\4\5/'  passwd

9. 删除每行最后一个单词

~]# sed -r 's/(.*)([^a-Z]+)([a-Z]+)/\1\2/' passwd
~]# sed -r 's/(.*)([^a-Z]+)([a-Z]+)([^a-Z]*)/\1\2\4/'  passwd

替换

1. 用制表符替换文件中出现的所有空格

~]# sed -r 's/ /\t/g' passwd

2. 把所有小写字母用括号()括起来

~]# sed 's/[a-z]/(&)/g' passwd  //用&代表前面匹配到的字母

3. 将格式 2018/12/31 换成 2018-12-31

~]# echo "2018/12/31" | sed 's#/#-#g'

4. 将文件中所有的root单词替换成大写的ROOT

~]# sed  's/\<root\>/ROOT/g' passwd

交换(替换思想)

1. 交换每行的第一个字符和第二个单词

~]# sed -r 's/^(.)([^a-Z]*)([a-Z]+)([^a-Z]+)([a-Z]+)/\5\2\3\4\1/' /etc/passwd

2. 交换每行的第一个单词和最后一个单词

~]# sed -r 's/([^a-Z]*)([a-Z]+)([^a-Z]+)(.*)([^a-Z]+)([a-Z]+)/\1\6\3\4\5\2/' passwd

3. 交换每行的倒数第二个单词和最后一个单词

~]# sed -r 's/([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]*)$/\1\4\3\2\5/' passwd

 插入(i\,a\)

1. 在第一行上插入

~]# sed  '1i\at the top'  passwd

2. 在匹配行上插入

~]# sed  '/^the/i\I am here'  passwd

3. 在第二行下面插入

~]# sed  '2a\I am here'  passwd

4. 在最后一行下面插入

~]# sed  '$a\at the bottom'  passwd

结束.

不定时更新,如有不解,欢迎留言交流 ^_^

linux环境sed命令实例学习的更多相关文章

  1. linux 的sed命令解释 sed ':t;N;s/\n/,/;b t' 将换行符换成逗号

    linux 的sed命令解释 sed ':t;N;s/\n/,/;b t' 将换行符换成逗号 实现的功能是吧换行符换成逗号了,自己试验过. 求解释,:t N b t 都是什么意思??? :t 定义la ...

  2. linux中sed命令(全面解析)

    目录 一:linux中sed命令介绍 1.sed作用 2.sed命令格式 3.参数 4.sed的编辑模式 5.sed参数解析用法 二:sed 参数 -f 案例实战解析 1.前介 2.引入简介 3.方法 ...

  3. Linux系统sed命令常用参数实战

    Linux系统sed命令常用参数实战 常用参数 -n 输出某行的文本内容,通常与p联合使用, -e 命令行模式下进行sed的动作编辑,输出编辑后的内容,源文件不会发生变化 -f 以命令中指定的scri ...

  4. linux下sed命令对文件执行文本替换

    让我们看一下 sed 最有用的命令之一,替换命令.使用该命令,可以将特定字符串或匹配的规则表达式用另一个字符串替换.下面是该命令最基本用法的示例: $ sed -e ‘s/foo/bar/’ myfi ...

  5. linux的sed命令(一)

    转自:https://www.cnblogs.com/ginvip/p/6376049.html Sed 简介 sed 是一种新型的,非交互式的编辑器.它能执行与编辑器 vi 和 ex 相同的编辑任务 ...

  6. linux中sed命令的使用

    sed命令是linux或者shell编程中常用的筛选.替换命令,如果能熟练使用sed则对经常使用的人来说在工作上是非常有帮助的 下面把sed主要的用法列出来(有错误的地方大家可以指正): p命令只打印 ...

  7. Linux环境SVN命令行使用经验总结(转)

    在windows机器上开发得差不多了之后,打包传送到开发机编译,在开发机上解决编译错误. [缺点] 浪费时间在打包解包,机器间传输代码. 在windows机器上开发之后,check in代码进分支,在 ...

  8. 转 linux之sed命令详解

    http://jingyan.baidu.com/article/fec4bce2228f60f2618d8bb0.html sed  编辑裁剪文件命令 sed -i "s/\/db\/te ...

  9. Linux shell sed命令使用

    Linux处理文本文件的工具:     grep        过滤文件内容     sed            编辑文件内容     awk             正则表达式Regex      ...

随机推荐

  1. Ubuntu 12.04 安装socks5代理服务器dante-server

    dante-server是一个很好的socks4/5代理服务器软件. 使用apt-get安装   1 apt-getinstall dante-server 添加一个用户   1 2 useradd ...

  2. EntityFrameworkCore中的实体状态

    Entry表示一个追踪,里面有state属性,是EntityState的枚举类型. 每一个实体都有一个相对应的Entry: var entry = dbContext.ChangeTracker.En ...

  3. idea远程调试tomcat

    在开发Spring Boot应用的时候,会发现有的时候在idea工具中运行程序和打包程序后在tomcat下运行程序的结果会不太一样,因此就需要远程调试tomcat. 首先在tomcat目录下的bin目 ...

  4. [转帖]linux 清空history以及记录原理

    linux 清空history以及记录原理 自己的linux 里面总是一堆 乱七八槽输错的命令 用这个办法 可以清空 linux的内容. 清爽一些. 1.当前session执行的命令,放置缓存中,执行 ...

  5. Oracle创建'数据库'三步走

    --创建表空间 create tablespace waterboss datafile 'd:\waterboss.dbf' size 100m autoextend on next 10m; -- ...

  6. table index & delete array item

    table index & delete array item https://www.iviewui.com/components/table#ZDYLMB 编辑 row = { " ...

  7. 用织梦建站如何去掉a这个目录,还有内容页的a

    1.另外建一个站点,将物理路径直接指向a即可. 2.去掉文章页生成的带a的路径: 只需要这一句话:  function='str_replace("/a","" ...

  8. 让PC端页面在手机端显示缩小版的解决方法

    做页面的时候我们做好pC端页面时,因编辑那边需求,在手机端页面也应该是缩小版,不能乱的.在网上找了各种解决方案,经实验,这种是可以的: 在head里边加上这两句meta  <meta name= ...

  9. Fiddler-学习笔记-远程抓包

    1 操作系统低于win7用 fiddler 2 win7 或win7以上版本,用 fiddler4片本 2 fiddler开关:左下角或点击F12控件fiddler开关,开=capturing 3 启 ...

  10. QTP 自动化测试--点滴 获取datatable数值/dafault文件位置

    0 设置default.xls文件位置 右键项目-settings-resources-datatable-选择 数据表的位置如图 心得:同一个项目-分成多个测试项目-这些测试项目可以共用同一张数据表 ...