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 ':取出最后一行