Linux运维常用命令之sed

sed是平时运维工作中较为常用的命令之一,周末时间整理下之前的笔记,并记录下来。sed是一个行文本编辑器,对纯ASCII码文本按行处理。sed在处理文本的时候,逐行将内容读取到内存中做处理,并将处理结果输出。这段内存空间称为“模式空间”,因为 sed并不一定每一行都处理,可以根据一定的模式匹配某些行进行处理。默认不修改源文件,仅对模式空间中的数据做处理。处理结束后将模式空间中的内容打印出来。


sed几个语法规则:

1sed 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:删除指定的行

wKiom1WzVSDjfM2YAABc4wEXzrU490.jpg

wKioL1WzVwiDS3jXAABdRwZSfco192.jpg


从第一行开始,删除向后一行,一共删除两行

wKiom1WzVVqxQwnAAABu4AgFr84117.jpg


    

    p:显示符合条件的行

下边的例子,符合条件的显示了两次,这是由于sed命令默认情况下还要将模式空间中的内容也显示出来,而p命令则是显示匹配到的行,所以一共显示了两行

wKiom1WzVfuQgAnWAABbZ2c3mJY525.jpg   

-n 只显示符合条件的行:

wKioL1WzWDaQIQhbAABFycwsGlw333.jpg

a:用法 a \string---表示在指定的行后追加新行,内容为string

wKiom1WzVnjTKBzDAABqgQPlj0M804.jpg

若要在匹配行后增加两行,string\n换行即可

wKioL1WzWH_yMolwAAClYtfXh0A937.jpg

i \string:表示在指定的行前面添加新行,内容为string,\n换行

wKiom1WzVuCwiDO5AADY2rRIW38512.jpg

r filename: 将指定的文件的内容添加至符合条件的行处

在第二行后边添加另外一个文件的内容,/root/tt是另外一个文本文件路径

wKiom1WzVxnSbx5OAADL79r6QFQ133.jpg

多行处理

wKioL1WzWR_xBAzbAACc-kvhGmc066.jpg

w filename:将指定范围内的内容另存到指定的文件中

下边例子中/tmp/t2是文件路径

wKiom1WzV4yhV9EkAACoIhp-vnQ008.jpg

s : 查找并替换   s/匹配模式/要替换的内容/   分隔符不仅限于/,可以是其他符合如s#匹配模式#要替换的内容#

wKioL1WzWcCwK8AZAABjf6LRvB0191.jpg

默认是只替换每行中第一次匹配到的字符串

wKiom1WzWAPQpmutAAB3Jw2CEG8315.jpg


如果要每行中匹配到的所有字符串都被替换,需要使用下边两个参数:

  g:全局替换

  i:查找时忽略字符大小写

wKioL1WzWjSCOvGeAAB7AT5ngPw829.jpg

wKiom1WzWEvj6mYiAABpt08IRAE018.jpg


sed 中的后向引用:

&表示引用模式匹配的整个字符串

wKioL1WzWnXxEwQcAADYNkBEVYU713.jpg

后向引用:

wKiom1WzWK6TUgSkAACWngWYsP8089.jpg

只引用匹配到的内容的一部分的时候,必须使用后向引用

如将匹配到的单词的l字符大写

wKioL1WzWsfC_k8eAADiwqjsm-8579.jpg

Sed 默认不会修改源文件,如果需要对源文件直接做修改,使用-i选项即可.

-r :默认情况下sed只支持基本正则,-r使的sed可以使用扩展的正则表达式

如,删除文件中以空白字符后边加#开头的行中的开头的空白字符及#

wKiom1WzWU2REiJ8AADkezxFapI192.jpg

你可能感兴趣的:(linux,sed,sed,详解)