shell编程三剑客---sed

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:测试指定字符串是否不空 

   

猜你喜欢

转载自blog.csdn.net/y805805/article/details/83661825
今日推荐