sed命令的介绍和用法

  

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(模式空间),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如' D '的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

  

sed的功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等

  

sed基本用法

  

sed[选项]…“脚本”inputfile…

  

sed(选项]. .“脚本这个脚本是sed自身的脚本的处理的文件…

  

常用选项:

  

- n不输出模式空间内容到屏幕,即不自动打印

  

- e多点编辑

  

- f/道路/SCRIPT_FILE从指定文件中读取编辑脚本

  

- r支持使用扩展正则表达式

  

我。贝克备份文件并原处编辑:直接修改

  

sed - i。贝克(自己定义)'/^根/aadmin’;真的修改文件并备份原文件

  

脚本:   

”地址命令”:地址是对文本中的那个部分进行处理,对那些行进行处理如何进行处理就是根据命令来进行处理的

  

地址定界:

  

(1)不给地址:对全文进行处理

  

(2)单地址:

  

#:指定的行,美元:最后一行

  

/模式/:被此处模式所能够匹配到的每一行

  

(3)地址范围:

  

#, #   

# + #

  

/pat1/,/pat2:只显示中间的部分内容

  

例如:sed - n '/^ ftp/,/^ sa/p”/etc/passwd

  

#, pat1/

  

(4) ~:步进

  

1 ~ 2奇数行

  

seq 10 | sed - n ' 1 ~ 2 p

  

2 ~ 2偶数行

  

seq 10 | sed - n ' 2 ~ 2 p

  

sed - n 2 p的/etc/passwd:只打印第2行

  

sed命令不仅是对文本,还可以把一些命令的标准输出作为输入进行处理

  

比如:ifconfig eth0 | sed - n ' 2 p

  

编辑命令:

  

d删除模式空间匹配的行,并立即启用下一轮循环(sed的2 d/etc/passwd第二行不显示)

  

p打印当前模式空间内容,追加到默认输出之后(本身就会打印加上p之后会在打印一次)

  

[]文本在指定行后面追加文本,支持使用\ n实现多行追加

  

seq 10 | sed“axxx”:每一行追加xxx

  

还可以添加换行符:seq 10 | sed的axxx \ nttt \ nzzz”

  

还可以添加换行符:seq 10 | sed ' 2 axxx \ nttt \ nzzz”

  

第二行进行追加

  

我在[]文本行前面插入文本:添加斜线表示之后的内容为添加的内容

  

c[]文本替换行为单行或多行文本

  

w/道路/文件保存模式匹配的行至指定文件

  

r/道路/文件读取指定文件的文本至模式空间中匹配到的行后

  

sed - n '/^ UUID/r/etc/issue '挂载:读取文件内容

  

=为模式空间中的行打印行号

  

!模式空间中匹配行取反处理

  

sed“/etc/passwd:什么都不跟相当与显示一下文件

  

修改selinux中配置文件

  

sed - i '/^ SELINUX=执行/cSELINUX=禁用'/etc/selinux/config

  

禁用SElinux   

sed - C/^ ^ SELINUX=/cSELINUX=禁用'/etc/selinux/config

  

///g:查找替换,分隔符自己指定,可为s@@@,年代# # #

  

替换标记:g,全局替换,我忽略大小写

  

高级编辑命令

  

h:把模式空间中的内容覆盖至保持空间

  

H:把模式空间中的内容追加至保持空间

  

g:把保持空间中的内容覆盖至模式空间

  

G:把保持空间中的内容追加至模式空间

  

x:把模式空间和保持空间中的内容互换

  

n:覆盖读取匹配到的行的下一行至模式空间

  

N:追加读取匹配到的行的下一行至模式空间

  

d:删除模式空间中的行

  

D:删除多行模式空间中的行

  

在sed语句中强行引用变量

  

" var_name””:使用三个“引号在sed语句中可强行引用变量值

  

例:IP=IP

  

[root@centos7测试]# ifconfig ens33 | sed nr #。 inet (。)。* # " $ IP“\ 1 # p”

  IP 192.168.0.100

  

示例:   

seq 1 10 | sed - n n, p:取偶数行

  

seq 1 10 | sed“n; d”:取奇数行

  

seq 1 10 | sed 1 ! G; h; $ !d ':逆序显示

  

seq 1 10 | sed的$ !d ':取出最后一行

sed命令的介绍和用法