学习的内容来自于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:显示版本信息
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来处理。
首先假设我们有这么一个文件
或者说我们可以用-f的方法来完成
/pattern/d 会删除匹配样式的行
Nd会删除第n行
2)-p
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的行。
【&】 已经匹配的样式
【\1】字串匹配标记
这里匹配到的内容是digit 7 ,这里/1所标记的内容是[0-9]所标记的
因此这里可以理解成为7替换了digit 7