Sed:数据流编辑器
行编辑器,不是字处理器,只操作ASCLL码的,是按逐行处理文本。
全屏编辑器:vi,vim
Sed在处理文本的时候,逐行将内容读取到内存中做处理,并将结果输出。这段内存空间称为“模式空间”,因为sed并不一定每一行都处理,可以根据一定的模式匹配某些行进行处理。默认不修改源文件,仅对模式空间中的数据做处理。处理结束后将模式空间中的内容打印出来。
man sed
{}中的内容较为重要,称为 sed 脚本,sed 本身也是个语言
1.sed startline,endline file
从起始行到结束行,如1,100,从第一行到第100行
2.模式匹配行
sed /^root/file 以root开头的行
3. /模式1/,/模式2/ 表示该文件第一次被模式1匹配到行开始到第一次被模式2匹配的行结束,这中间的所有行
4.只给一个数值,行号 表示精确指定特定的行
sed 100 file 精确处理第100行,$表示最后一行 sed $ file ,$-1表示倒数第二行
5.指定起始行,使用+N,表示从指定行开始,向后的N行,一共为N+1行内容
sed 2,+10 file
Sed中的命令:
d:删除符合条件的行
(匹配第1,2行 ,d 表示删除之后,只剩下第三行了)
(匹配到以asd的行,然后删除,只剩下aaa了)
(从第一行开始,删除向后一行,一共删除两行)
p:显示符合条件的行
下边的例子,符合条件的显示了两次,这是由于sed命令默认情乱下还要将模式空间中的内容也显示出来,而p命令则是显示匹配到的行,所以一共显示两行
(匹配以d结尾的行,p表示显示)
-n 静默匹配,即不显示模式空间中的内容,只显示符合条件的行:
a:用法 a \string---表示在指定的行后追加新行,内容为 string
若要在匹配行后增加两行,string 中\n 换行即可
i \string:表示在指定的行前面添加新行,内容为 string,\n 换行
r filename: 将指定的文件的内容添加至符合条件的行处
在第二行后边添加另外一个文件的内容
(在 t 文件后面的第二行添加 tt文件的内容) 呜啦啦,这里有些难理解啊
多行处理
w filename:将指定范围内的内容另存到指定的文件中
s : 查找并替换 s/匹配模式/要替换的内容/ 分隔符不仅限于/,可以是其他符合
如 s#匹配模式#要替换的内容#
默认是只替换每行中第一次匹配到的字符串
每行中所有匹配到的都替换
g:全局替换
i:查找时忽略字符大小写
sed 中的后向引用:
&表示引用模式匹配的整个字符串
后向引用:
只引用匹配到的内容的一部分的时候,必须使用后向引用
将匹配到的单词的 l 字符大写
Sed 默认不会修改源文件,但是-i 选项,可以直接修改源文件
-e script -e script: 同时执行多个脚本
-f FILENAME : 将每个 script 一行保存至文件中,使用-f 读取脚本文件
sed -f /script file
-r :默认情况下 sed 只支持基本正则,-r 使得 sed 可以使用扩展的正则表达式
练习:
1、History 命令的结果行首的空白字符删掉:
2、取出一个文件路径的目录名称
3、删除文件中以空白字符后边加#开头的行中的开头的空白字符及#
字符串 比较:
==:双等于号,双等号两端要有空格
!=:不等于
注意:以上二者得区别。
>:大于
<:小于
-n string :测试指定字符串是否为空
-s string:测试指定字符串是否不空