shell三剑客之sed

学习的内容来自于Linux Shell脚本攻略(2)

内容只做了简单的记录,方便自己学习

shell 命令查询地址:http://man.linuxde.net/

Sed

Sed原名为stream editor 流式文本编辑器

那么什么是流式文本编辑器呢,就是他在运行的时候,每次只处理数据中的一行。

Sed一共具有两种缓存区,一直叫做临时缓存区,也就是工作区,称为模式空间。而另一种就是持久缓存区,也就是存储区,称为保存空间。

首先Sed会接受一串需要处理的文本数据,紧接着Sed会使用他的特性流式编辑来对文本惊醒处理。模式空间时一块活跃的缓存区,在这里Sed可以执行他的命令。Sed会从数据中一行一行的取下数据放到模式空间中。而当Sed在模式空间中处理数据的时候,保持空间可以临时保存一些数据行。但是在保存空间中,Sed无法执行命令。

一开始 保存空间和模式空间内的数据均为空

命令格式

sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
-e<script>或--expression=<script>:以选项中的指定的script来处理输入的文本文件;
-f<script文件>或--file=<script文件>:以选项中指定的script文件来处理输入的文本文件;
-h或--help:显示帮助;
-n或--quiet或——silent:默认情况下,模式空间中的内容在处理完成后将会打印到标准输出,该选项用于阻止该行为;
-V或--version:显示版本信息

1533102432644.png
a\ 在当前行下面插入文本。
i\ 在当前行上面插入文本。
c\ 把选定的行改为新的文本。
d 删除,删除选择的行。
D 删除模板块的第一行。
s 替换指定字符
h 拷贝模板块的内容到内存中的缓冲区。
H 追加模板块的内容到内存中的缓冲区。
g 获得内存缓冲区的内容,并替代当前模板块中的文本。
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
l 列表不能打印字符的清单。
n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
p 打印模板块的行。
P(大写) 打印模板块的第一行。
q 退出Sed。
b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
r file 从file中读行。
t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
w file 写并追加模板块到file末尾。  
W file 写并追加模板块的第一行到file末尾。  
! 表示后面的命令对所有没有被选定的行发生作用。  
= 打印当前行号码。  
# 把注释扩展到下一个换行符以前。 

1)比如我们使用其中d ,d表示delete删除的意思 , -e 则表示接下来的会使用选项中指定的script来处理。

首先假设我们有这么一个文件


1533095401134.png

1533095563483.png

或者说我们可以用-f的方法来完成

1533096460073.png

/pattern/d 会删除匹配样式的行

Nd会删除第n行

2)-p

1533102539963.png

3)-s

sed 's/patterns/replace_patterns' filename

sed -i 's/patterns/replace_patterns' filename 匹配的同时保存更改

sed 's/patterns/replace_patterns/g' filename /g表示替换所有匹配的项目

sed 's/patterns/replace_patterns'/Ng filename 从第n处匹配开始替换

字符/作为sed 's' 中的一种定界符,但是我们可以任意使用不同的定界符| . , 如果匹配的内容中出现定界符了,那我需要用\|来转换

g 表示行内全面替换。  
p 表示打印行。  
w 表示把行写入一个文件。  
x 表示互换模板块中的文本和缓冲区中的文本。  
y 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
\1 子串匹配标记
& 已匹配字符串标记
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。  
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\< 匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行。
\> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。
x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。
x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。
1533094585156.png

【&】 已经匹配的样式

1533109251299.png

【\1】字串匹配标记

1533110017940.png

这里匹配到的内容是digit 7 ,这里/1所标记的内容是[0-9]所标记的

因此这里可以理解成为7替换了digit 7


1533110322051.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等。如果我们相对这些文件进行一些...
    以七v为书阅读 1,542评论 0 5
  • 简介 sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(p...
    699b979fc4da阅读 1,023评论 0 1
  • 原文链接:sed命令_Linux sed 命令用法详解:功能强大的流式文本编辑器 http://man.linu...
    e2ae5d4bd7c1阅读 812评论 0 1
  • 本文承接之前写的三十分钟学会AWK一文,在学习完AWK之后,趁热打铁又学习了一下SED,不得不说这两个工具真的堪称...
    mylxsw阅读 4,416评论 3 74
  • 一、命令行工具CLI的安装与使用 (详情参考LeanCloud官方文档) 安装 2.登录与启动 二、LeanClo...
    _Wake阅读 2,521评论 0 3