Shell 工具之 sed
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的更多相关文章
- 两个有用的shell工具总结
shell工具之一:sed sed基础 sed编辑器被称作流编辑器,与常见的交互式文本编辑器刚好相反.文本编辑器可以通过键盘来交互式地插入.删除.替换文本中的数据:而流编辑器是基于一组预先的规则来编辑 ...
- Shell工具| 流程控制
1. 流程控制 if 判断 ()[ 条件判断式 ],中括号和条件判断式之间必须有空格 ()if后要有空格 [kris@hadoop datas]$ vim if.sh #!/bin/bash -eq ...
- Shell 脚本(五) Shell 工具 及 企业面试题
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 十.Shell工具(重点) 1.cut cut 的工作就是“剪”,具体的说就是在文件中负责剪切数据用的. ...
- linux shell工具集合
1)判断进程是否存在,如果不存在再执行启动命令,可以避免一个脚本同时启动多份 if [ $(ps -ef |grep bastion_account.sh|grep -v grep|wc -l) - ...
- 一款值得推荐的shell工具
1. 一款比较出色的shell工具 熟练的运用shell语言可以提高我们的工作效率,而一款好的shell工具能提高学习的效率,fish shell就是这样一款工具.并且是一款跨平台的工具, 同时可以在 ...
- 基于.htaccess的Web Shell工具htshells
基于.htaccess的Web Shell工具htshells .htaccess文件是Apache服务器的配置文件.它负责相关目录下的网页配置.一旦用户获得修改该文件的权限,就可以基于该文件构建 ...
- ipython是python的交互式shell工具
ipython: 是python的交互式shell工具,比默认的python shell工具要好用.支持变了自动补全,自动缩进,内置了很多的功能和函数 启动:可以通过cmd来启动该工具 自动补全: I ...
- 在shell中使用sed命令替换/为\/
sed命令相关: https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html https://www.cnblogs.com/D ...
- 二、hbase shell工具
hbase单节点安装请参考: https://www.cnblogs.com/lay2017/p/9944387.html 下文演示hbase shell工具常用的命令,首先启动hbase以及进入sh ...
随机推荐
- pca算法实现
pca基础知识不了解的可以先看下一这篇博客:https://www.cnblogs.com/lliuye/p/9156763.html 具体算法实现如下: import numpy as np imp ...
- react 高阶组件之小学版
高阶组件 多么高大上的概念,一般用来实现组件逻辑的抽象和复用,在很多三方库(redux)中都被使用到,但是开发普通有任务项目时,如果能合理使用高阶组件,也会显著的提高代码质量. 我们今天就用最简单的 ...
- 详解JDBC与Hibernate区别
详解JDBC与Hibernate区别 引用地址:http://www.cnblogs.com/JemBai/archive/2011/04/13/2014940.html 刚开始学习JAVA时,认为H ...
- 解决ubuntu16.04鼠标键盘自动休眠导致的失灵问题
sudo vi /etc/laptop-mode/conf.d/runtime-pm.conf 把 AUTOSUSPEND_RUNTIME_DEVTYPE_BLACKLIST="" ...
- 浅析ES的_source、_all、store、index
Elasticsearch中有大量关键概念容易混淆,对于初学者来说是噩梦: _source字段里存储了什么? index属性的作用是什么? 何时应该开启_all字段? store属性和_source字 ...
- cordova开发笔记
搜狐邮箱APP 使用了cordova框架,遇到了一些列问题,稍微总结记录下 扩展支持appInBrowser,用来以新窗口方式打开外链url 解决跨域问题(cordova默认当前域为localhost ...
- 第十四篇:PL/SQL Developer Oracle配置和必知基础
1.一般在本地使用PL/SQL 第三方工具操作Oracle数据库,首先你的机器上得有oracle的客户端client,下一个就行了,很小2.首先找到你下载的oracle的客户端的包,找到tnsname ...
- <Django>socket简单实现django简化版
服务端(自己实现django) ''' django简化版:socket服务端 a.收发浏览器信息----wsgiref.py b.根据用户访问的不同路径执行不同函数 c.从html读取出内容,并完成 ...
- 获取调用U9接口时报错的方法
- JS数组 二维数组 二维数组的表示 方法一: myarray[ ][ ];方法二:var Myarr = [[0 , 1 , 2 ],[1 , 2 , 3, ]]
二维数组 一维数组,我们看成一组盒子,每个盒子只能放一个内容. 一维数组的表示: myarray[ ] 二维数组,我们看成一组盒子,不过每个盒子里还可以放多个盒子. 二维数组的表示: myarray[ ...