sed编辑器称为流编辑器(stream editor)。可以根据输入命令行的命令或者存储在命令文本文件中的命令处理数据。每次从输入读取一行数据,将该数据与所提供的编辑器命令进行匹配,根据命令修改数据流中的数据,然后将新数据输出到STDOUT。

sed 命令格式:

sed options script file

options 允许自定义 sed 命令的行为,它包含的选项如表1所示。

script 指定要应用于数据流的单个命令。如果需要多个命令,使用 -e 或者 -f 选项。

表1: sed 命令选项

选项 描述
-e script 将脚本中指定的命令添加到处理输入时执行的命令中
-f file 将文件中指定的命令添加到处理输入时执行的命令中
-n 不需要为每个命令产生输出,但要等待打印命令

在命令行中定义编辑器命令

$ echo "This is a test" | sed 's/test/big test/'

$ sed 's/dog/cat/' data1

在命令行中使用多个编辑器命令

$ sed -e 's/brown/green/; s/dog/cat/' data1

注意:命令必须用分号隔开,且在命令结尾和分号之间不能有任何空格。

也使用次提示符,而不是分号分隔

$ sed -e '

> s/brown/green/

> s/fox/elephant/

> s/dog/cat/' data1

从文件读取编辑器命令

$ sed -f script1 data1

$ cat script1

s/brown/green/

s/fox/elephant/

s/dog/cat/

sed 命令

替换标记

s  用新文本替换某一行中的文本

s/pattern/replacement/flags

可用的替换标记有4种:

  • 数字:表示新文本替换的模式
  • g:表示用新文本替换现有文本的全部实例
  • p:表示打印原始行的内容
  • w file:将替换的结果写入文件

$ sed 's/test/trial/2' data1 仅替换每一行中第二次出现的模式

$ sed 's/test/trial/g' data2

$ sed -n 's/test/trial/p' data4 替换命令中匹配模式的那一行,经常和-n 选项一起使用

$ sed 's/test/trail/w test' data5

替换字符

sed 编辑器允许为替换命令中的字符串定界符选择一个不同的字符。

$ sed 's!/bin/bash!/bin/csh!' /etc/passwd

使用地址

在 sed 编辑器中, 有两种行寻址形式:

行的数值范围

筛选行的文本模式

格式

[address] command

或者将多个命令组合在一起

address {

command1

command2

}

数字式寻址

$ sed '2s/dog/cat/' data1

$ sed '2,3s/dog/cat' data1

$ sed 2,$s/dog/cat' data1

文本模式筛选器

格式

/pattern/command

$ sed '/rich/s/bash/csh/' /etc/passwd

组合命令

如果需要在单独一行上执行多个命令,使用大括号将命令组合在一起

$ sed '2,${

> s/fox/elephant/

> s/dog/cat/

> }' data1

删除行

d 删除与锁提供的寻址模式一致的所有文本行。

$ sed '3d' data1

$ sed '2,3d' data2

$ sed '2,$d' data3

$ sed 'number 1/d' data4

还可以使用两个文本模式删除若干行。指定的第一个模式将打开行删除,第二个模式将关闭行删除。sed 编辑器将删除指定的这两行(包括这两行)之间的所有文本行。

sed '/1/,/3/d' data5

插入和附加文本

i 在指定行之前添加新的一行

a 在指定行之后添加新的一行

不能在单命令行上使用这两个命令,必须单独指定要插入或附件的行。

格式

sed '[address]command\

new line'

$ echo "testing" | sed 'i\

> This is a test'

$ echo "testing" | sed 'a\

> This is a test'

更改行

c 允许更改数据流中整行文本的内容。

$ sed '3c\

> This is a changed line of text.' data5

$ sed '/number 3/c\

> This is a changed line of text.' data5

$ sed '2,3c\

> This is a  new line of text.' data5

变换命令

y 命令是唯一对单个字符进行操作的 sed 编辑器命令。格式:

[address]y/inchars/outchars/

变换命令将 inchars 和 outchars 的值进行一对一映射。

$ sed 'y/123/789/' data1

打印

有3个命令可以用于打印来自数据流的信息

打印文本行的小写 p 命令

打印行号的等号(=)命令

列出行的 l 命令

打印行

$ echo "This is a test" | sed 'p'

$ sed -n '/number 3/p' data1

$ sed -n '2,3p' data1

$ sed -n '/3/{

p

s/line/test/p

}' data4

打印行号

$ sed '=' data1

$ sed -n 'number 4/{

=

p

}' data4

列出行

列出命令(l)允许打印数据流中的文本和不可打印的 ASCII 字符。

$ sed -n 'l' data6

写文件

w 命令用于将文本行写入文件。

格式

[address]w filename

filename 可以指定为相对活绝对路径。

$ sed '1,2w test' data2

$ sed -n '/IN/w INcustomers' data1

从文件中读取

r 命令允许插入包含在独立文件中的数据。

格式

[address]r filename

$ sed '3r data11' data2

$ sed '/number 2/r data11' data2

$ sed '$r data11' data2 将文本添加到数据流末尾

$ sed '/LIST/{

> r data10

> d

> }' letter 套用信函使用类占位符 LIST 代替人员列表,并删除占位符。

模式空间和保留空间

Shell 工具之 sed的更多相关文章

  1. 两个有用的shell工具总结

    shell工具之一:sed sed基础 sed编辑器被称作流编辑器,与常见的交互式文本编辑器刚好相反.文本编辑器可以通过键盘来交互式地插入.删除.替换文本中的数据:而流编辑器是基于一组预先的规则来编辑 ...

  2. Shell工具| 流程控制

    1. 流程控制 if 判断 ()[ 条件判断式 ],中括号和条件判断式之间必须有空格 ()if后要有空格 [kris@hadoop datas]$ vim if.sh #!/bin/bash -eq ...

  3. Shell 脚本(五) Shell 工具 及 企业面试题

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 十.Shell工具(重点) 1.cut cut 的工作就是“剪”,具体的说就是在文件中负责剪切数据用的. ...

  4. linux shell工具集合

    1)判断进程是否存在,如果不存在再执行启动命令,可以避免一个脚本同时启动多份 if [ $(ps -ef |grep  bastion_account.sh|grep -v grep|wc -l) - ...

  5. 一款值得推荐的shell工具

    1. 一款比较出色的shell工具 熟练的运用shell语言可以提高我们的工作效率,而一款好的shell工具能提高学习的效率,fish shell就是这样一款工具.并且是一款跨平台的工具, 同时可以在 ...

  6. 基于.htaccess的Web Shell工具htshells

    基于.htaccess的Web Shell工具htshells   .htaccess文件是Apache服务器的配置文件.它负责相关目录下的网页配置.一旦用户获得修改该文件的权限,就可以基于该文件构建 ...

  7. ipython是python的交互式shell工具

    ipython: 是python的交互式shell工具,比默认的python shell工具要好用.支持变了自动补全,自动缩进,内置了很多的功能和函数 启动:可以通过cmd来启动该工具 自动补全: I ...

  8. 在shell中使用sed命令替换/为\/

    sed命令相关: https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html https://www.cnblogs.com/D ...

  9. 二、hbase shell工具

    hbase单节点安装请参考: https://www.cnblogs.com/lay2017/p/9944387.html 下文演示hbase shell工具常用的命令,首先启动hbase以及进入sh ...

随机推荐

  1. AutoMapper 在你的项目里飞一会儿

    先说说DTO DTO是个什么东东? DTO(Data Transfer Object)就是数据传输对象,说白了就是一个对象,只不过里边全是数据而已. 为什么要用DTO? 1.DTO更注重数据,对领域对 ...

  2. 全局CSS设置

    全局CSS设置 1.清除所有的标记的内外边距 body,ul,li,a,img,p,input{ margin:0; padding:0; } 2.去除项目符号或编号前面的符号 ul,ol,li{ l ...

  3. springboot-配置多数据源(AOP实现)(HikariCP + MybatisPlus + mysql + SqlServer)

    场景: springboot项目,默认使用HikariCP连接池 + MybatisPlus持久层框架 + mysql数据库等一套流程,现需求需去第三方sqlserver数据库拉取数据,直连数据库,不 ...

  4. 外引js — 先引入cdn,cdn失效时引入本地js

    参考:http://www.tianshan277.com/563.html 效果: html: <!DOCTYPE html> <html lang="en"& ...

  5. Activiti表单(Form key)

    1.设置Form key如图: 2.根据任务id得到Form key TaskFormData formData = formService.getTaskFormData(taskId);; Str ...

  6. [JZOJ4639] 【NOIP2016提高组A组7.16】Angel Beats!

    题目 描述 题目大意 给你一棵树,每次询问两个点,求出这两个点的子树的重心到其中每个点的距离和. 重心的定义是到其中每个点距离和最小的点(不一定在两棵子树内) 思考历程 想想以前我是怎么求重心的呢-- ...

  7. 【JZOJ3238】【BZOJ3482】超空间旅行

    description 在遥远的未来,行星之间的食品运输将依靠单向的贸易路线.每条路径直接连接两个行星,且其运输时间是已知的. 贸易商协会打算利用一项最近发现的新技术--超空间旅行,以增加一些新的航线 ...

  8. BZOJ1912:[APIO2010]patrol巡逻

    Description Input 第一行包含两个整数 n, K(1 ≤ K ≤ 2).接下来 n – 1行,每行两个整数 a, b, 表示村庄a与b之间有一条道路(1 ≤ a, b ≤ n). Ou ...

  9. vue的无缝滚动插件vue-seamless-scroll的使用

    https://chenxuan0000.github.io/component-document/index_prod.html#/component/seamless-others 在vue环境下 ...

  10. 最新MySQL5.7.3.0版本安装(图文版本)

    转自:http://www.myexception.cn/mysql/1609536.html 可以从http://dev.mysql.com/downloads/下载MySQL服务器安装软件包,我下 ...