美文网首页
shell三剑客之sed

shell三剑客之sed

作者: 何阿驼 | 来源:发表于2018-08-11 22:59 被阅读0次

学习的内容来自于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

相关文章

  • sed的认识和基本应用

    1.Sed 介绍 sed全名叫stream deitor,流编辑器。作为shell文本处理三剑客之一的sed,其不...

  • Shell编程、part5

    本节内容 1. 三剑客简介 2. sed命令详解 3. awk命令详解 文本处理三剑客 在 Shell 下使用这些...

  • shell三剑客之sed

    学习的内容来自于Linux Shell脚本攻略(2) 内容只做了简单的记录,方便自己学习 shell 命令查询地址...

  • shell三剑客之sed!

    背景 sed(Stream Editor 流编辑器),作为三剑客的一份子,主要的功能有增删改查。 为什么称之为“流...

  • 2019-06-19

    一. 三剑客sed命令 sed - stream editor for filtering and transfo...

  • Linux-grep、sed、awk之awk命令

    参考:Linux三剑客(grep sed awk) 之 awk[https://www.jianshu.com/p...

  • shell三剑客

    shell的三剑客 grep用来文本搜索,支持正则表达式 awk用来数据切片 sed用来修改文件数据 grep g...

  • shell之sed

    sed的处理模式是对每一行都进行处理,而且会先输出原行再输出匹配的行: 1. -n :只打印模式匹配行 注意:不加...

  • shell之sed

    sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed...

  • Linux云计算学习笔记day17

    Linux三剑客-sed sed命令执行过程https://www.processon.com/view/link...

网友评论

      本文标题:shell三剑客之sed

      本文链接:https://www.haomeiwen.com/subject/lkwrbftx.html