sed命令的基本使用方法
sed命令
stream editor,用程序的方式编辑文本。基本上是玩正则模式匹配。
用s命令替换
$ sed "s/my/Hao Chen's/g" pets.txt
单引号去除所有字符的特殊意义,双引号保留某些字符的特殊意义
默认是将处理过的内容输出,可以加-i参数直接修改原文件
$ sed -i "s/my/Hao Chen's/g" pets.txt在每行的最前面加东西
$ sed 's/^/#/g' pets.txt在每行的最后面加东西
$ sed 's/$/ --- /g' pets.txt正则表达式基本
^ 一行的开头
$ 一样的结尾
\< 词首
\> 词尾
. 任意单个字符
* 某个字符出现0次或多次
[] 集合,[^]取反
去除<>中的tags
$ sed 's/<[^>]*>//g' html.txt只替换第3到6行
$ sed "3,6s/my/your/g" pets.txt只替换第一个
$ sed 's/s/S/1' my.txt只替换第3个以后的
$ sed 's/s/S/3g' my.txt&可以作为被匹配的变量
$ sed 's/my/[&]/g' my.txt给my加上[]
多个匹配
- 分号分割
sed '1,3s/my/your/g; 3,$s/This/That/g' my.txt前3行一个操作,后面一个操作 - -e参数
sed -e '1,3s/my/your/g' -e '3,$s/This/That/g' my.txt
圆括号匹配
- 圆括号内匹配的字符串可以当变量使用\1,\2
$ sed 's/This is my \([^,&]*\),.*is \(.*\)/\1:\2/g' my.txt
sed多行匹配
sed -e ":begin; /<<</,/>>>/ { />>>/! { $! { N; b begin }; }; s/<<<.*>>>/COMMENT/; };" test
:begin;标记开头
/<<</,/>>>/ 表示后面的命令只处理<<<和>>>之间的部分,
后面的/>>>/! 表示如果当前行没有匹配到结束标记/>>>/
$代表文本的最后一行,$!表示如果当前不是最后一行
N 将下一行内容追加到缓冲区,相当于"合并"成一行
b begin 表示跳回begin处重新开始执行命令
s/<<<.*>>>/COMMENT/; 终于匹配成功,将<<<到>>>之间的内容替换为COMMENT
sed的命令
- N命令:把偶数行的内容接到奇数行进行匹配,即两两合并,\n分隔
$ sed 'N;s/\n/,/' pets.txt连接两行,用逗号分隔 - a命令和i命令:插入和追加
# 第一行前插入一行
$ sed "1 i This is my monkey, my monkey's name is wukong" my.txt
#最后一行后追加一行
$ sed "$ a This is my monkey, my monkey's name is wukong" my.txt
#匹配到/fish/后追加一行
$ sed "/fish/a This is my monkey, my monkey's name is wukong" my.txt
- c命令:替换匹配行
$ sed "2 c This is my monkey, my monkey's name is wukong" my.txt
$ sed "/fish/c This is my monkey, my monkey's name is wukong" my.txt
- d命令:删除匹配行
$ sed '/fish/d' my.txt
$ sed '2d' my.txt
$ sed '2,$d' my.txt
- p命令:打印
# 默认会打印处理的信息
$ sed '/fish/p' my.txt
# -n参数只打印匹配的信息
$ sed -n '/fish/p' my.txt
# 打印从一个模式到另一个模式的信息
$ sed -n '/dog/,/fish/p' my.txt
#从第一行打印到匹配fish成功的那一行
$ sed -n '1,/fish/p' my.txt
知识点
pattern space
sed处理文本的伪代码
```
对文件中每行数据
{
将一行数据放入pattern_space
对每个pattern space执行sed命令
如果没有指定-n则输出处理后的pattern space
}
```
Address
[address[,address]][!]{cmd}
address可以是一个数字,也可以是一个模式
# 可以使用相对位置
$ sed '/dog/,+3s/^/# /g pets.txt'
- 命令打包
可以用分号分隔,也可以用大括号嵌套
# 第3到6行删除This的行
$ sed '3,6 {/This/d}' pets.txt
# 第3到6行匹配了This,再匹配fish,则删除
$ sed '3,6 {/This/{/fish/d}}' pets.txt
# 从第一行到最后一行,如果匹配到This,则删除之;如果前面有空格,则去除空格
$ sed '1,${/This/d;s/^ *//g}' pets.txt
Hold Space不同行操作之间保持状态
g: hold space > pattern space中
G: hold space >> pattern space \n之后附加
h: pattern space > hold space
H: pattern space >> hold space \n之后附加
x: 交换pattern space和hold space的内容
例如有如下文本
$ cat t.txt
one
two
three
$sed 'H;g' t.txt
one
one
two
one
two
three
分析

例子2(反序输出)
$ sed '1!G;h;$!d' t.txt
three
two
one
命令可以拆解为3个
- 1!G--只有第一行不执行G,将hold space附加到pattern space
- h--每一行都执行h,将pattern space覆盖hold space
- $!d--最后一行不执行d,其余都清空pattern space
分析

sed命令的基本使用方法的更多相关文章
- Linux sed 命令字符串替换使用方法详解
1. sed替换的基本语法 sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义.2. 单引号” ‘ ’”是没有办法用反斜线” ...
- Shell之sed命令
sed用于一次性处理所有的编辑任务,尤为高效,为用户节省了大量的时间,sed适用于以下三种场合: 1.编辑相对交互文本编辑器而言太大的文件: 2.编辑命令太复杂,在交互式文本编辑器中难以输入的情况: ...
- sed命令基本用法
sed是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑sed 适用于以下三种场合:编辑相对交互式文本编辑器而言太大的文件编辑命令太复杂,在交互式文本编辑器中难以输入的情况对文本扫描一遍,但是 ...
- Linux sed命令使用方法
sed(Stream Editor)是Linux中文本处理使用非常广泛的工具,可以对文件内容进行替换.删除.新增.选取特定行等功能.下面通过sed常用实例介绍sed命令的使用方法. sed基本语法 s ...
- linux shell 用sed命令在文本的行尾或行首添加字符
转自 http://www.cnblogs.com/aaronwxb/archive/2011/08/19/2145364.html 昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed ...
- linux sed命令详解
简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...
- sed命令详解
搜索 纠正错误 添加实例 sed 功能强大的流式文本编辑器 补充说明 sed 是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时 ...
- Linux安全基础:sed命令的使用
sed 是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作. Sed本质上是一个编辑器,但是它是非交互式的,这点与VIM不同:同时 ...
- sed命令手册
sed 是一种在线编辑器,它一次处理一行内容. 处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space). 接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内 ...
随机推荐
- git和github的第一次接触
我的github的helloworld链接: https://github.com/xuziqian111/hello-world/blob/master/helloworld.java 我的gith ...
- 《贝贝GO》服务条款
服务条款 一.服务条款的确认与接收 1.贝贝GO客户端软件(以下简称“本软件”)各项电子服务的所有权和运作权归属于“东莞市山水信息技术有限公司”(以下称“本公司”)所有,本软件提供的服务将完全按照其发 ...
- String Method的字符串变换的一个例子
<!DOCTYPE html> <html lang="en"><head> <meta charset="UTF-8" ...
- CSS:与input相关的一些样式设置问题
input是HTML中非常重要,非常常用而又不可替代的元素,在于其相关的样式设置中有时会遇到其他元素不会发生的问题,今天把我印象中的一些小问题和解决方案记录一下. 1.与同行元素上下居中对齐 关于上下 ...
- Python--错误SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
Refer to:https://www.cnblogs.com/cyiner/archive/2011/09/18/2180729.html 用Python打开文件: fo=open("C ...
- 图解HTTPS协议
原文出处: leezhong的博客 我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议. HTTPS简介 HTTPS其实 ...
- rem,em,与px的比较用法
在Web中使用什么单位来定义页面的字体大小,至今天为止都还在激烈的争论着,有人说PX做为单位好,有人说EM优点多,还有人在说百分比方便,以至于出现了CSS Font-Size: em vs. px v ...
- 【笔记】 laravel 的路由
路由简介 : 请求对应着路由,将用户的请求转发给相应的程序进行处理 建立URL与程序之间的映射 Laravel中的请求类型:get.post.put.patch.delete Route::get ...
- 添加本地jar包到maven仓库
mvn install:install-file -Dfile=D:\video-lib\log4j-.jar -DgroupId=video -DartifactId=log4j -Dversion ...
- 解决long类型传到前端损失精度问题
原因: 解决办法:https://blog.csdn.net/xiaoxiangzi520/article/details/76522242 经过验证,发现上述解决办法回导致前端先后台传输数据时导致j ...