命令简介

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. vue实现双向数据绑定之Object.defineProperty()篇

    前言 vue.js中使用ES5的Object.defineProperty()实现数据的双向绑定 Object.defineProperty()原理 Object.defineProperty()可以 ...

  2. liunx 运维知识三部分

    一. 用户级用户组相关 二. 文件属性和链接知识及磁盘已满故障案例 三. 通配符 四. 特殊符号 五. 基础正则 六. 扩展正则 七. sed实践 八. awk实践

  3. 详解 RestTemplate 操作

    转载自:https://blog.csdn.net/itguangit/article/details/78825505 作为开发人员,我们经常关注于构建伟大的软件来解决业务问题.数据只是软件完成工作 ...

  4. git基本操作1

    1.创建版本库 在文件夹下,打开Git Bash Here ,然后执行git init,文件夹中会多出.git文件夹.(.git可能是隐藏的) 2.创建a.txt vim  a.txt ,并添加到版本 ...

  5. css的特性

    一.继承性: 继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代. /* 不具有继承性的css样式: */p{border:1px solid red;} 二.特殊性(优先 ...

  6. centos7优化启动项,关闭一些不必要开启的服务

    CentOS7已不再使用chkconfig 管理启动项 使用 systemctl list-unit-files 可以查看启动项 systemctl list-unit-files | grep en ...

  7. How to install Arch Linux

    fdisk -l mkfs.ext4 /dev/sdaX mount /dev/sdaX /mnt mkdir -p /mnt/boot/ mount /dev/sdaY /mnt/boot/ arc ...

  8. Using MongoDB with Web API and ASP.NET Core

    MongoDB is a NoSQL document-oriented database that allows you to define JSON based documents which a ...

  9. servlet篇 之 servlet的访问

    三:servlet的访问 使用web.xml文件中的这个<url-pattern>标签中的映射路径,来访问servlet 6.1 在浏览器的地址栏中,直接输入servlet映射的路径来访问 ...

  10. [TaskList] 省选前板子补完计划

    省选前本子补完计划 [ ] 带权并查集 [ ] 树上莫队 - UOJ58 [WC2013]糖果公园 loj2485「CEOI2017」Chase