Python全系列 教程
3567个小节阅读:5930k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
sed:行编辑器
sed [选项] 'AddressCommand' file…
[选项]
'AddressCommand'
d:删除符合条件的行
a\string:在指定的行后追加新行,内容为string
i\string:在指定行前添加新行,内容是string
s/string1/string2/:查找并替换,默认只替换每行第一次模式匹配到的字符串
sed.txt文件内容:
xxxxxxxxxx
Authentication improvements when using an HTTP proxy server.
Support for POSIX-style 8 filesystem extended attributes.
YARN's REST APIs now support write/modify operations.
案例实战:
xxxxxxxxxx
#第一行下插入一行
[root@node1 ~]# sed "1a\hello world" sed.txt
#直接修改文件
[root@node1 ~]# sed -i "1a\hello world" sed.txt
#删除第2行
[root@node1 ~]# sed -i "2d" sed.txt
#删除文档中的每一行
[root@node1 ~]# sed "d" sed.txt
#原来的内容要打印,匹配的行要打印,找到的行会打印两次
[root@node1 ~]# sed "/[0-9]/p" sed.txt
#匹配行中包含0-9任意一个字符的行,只打印找到的行
[root@node1 ~]# sed -n "/[0-9]/p" sed.txt
#匹配行中包含PATH的行,只打印找到的行
[root@node1 ~]# sed -n "/PATH/p" /etc/profile
case ":${PATH}:" in
PATH=$PATH:$1
PATH=$1:$PATH
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
#匹配行中包含PATH的行,将找到的行的内容写入到指定的文件中
[root@node1 ~]# sed -n "/PATH/w path.log" /etc/profile
[root@node1 ~]# cat path.log
case ":${PATH}:" in
PATH=$PATH:$1
PATH=$1:$PATH
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
#将filesystem替换为FS
[root@node1 ~]# sed "s/filesystem/FS/" sed.txt
#忽略大小写
[root@node1 ~]# sed "s/filesystem/FS/i" sed.txt
#不仅忽略大小写还要行内全局替换
[root@node1 ~]# sed "s/filesystem/FS/gi" sed.txt
复杂案例实战:将inittab 文件中的默认运行级别改为5。
xxxxxxxxxx
#准备操作用到的文件
[root@node1 ~]# vim inittab
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
id:3:initdefault:
[root@node1 ~]# sed "s/[0-6]/5/" inittab
#发现将所有匹配的都修改了(注意并未修改原文件),匹配访问太广了。
#更精确匹配方案的写法应该为如下命令:
[root@node1 ~]# sed "s/id:[0-6]:initdefault:/5/" inittab
#但是还存在问题,匹配后被修改内容问匹配出的部分,范围过大。解决办法:反向引用
[root@node1 ~]# sed "s/\(id:\)[0-6]\(:initdefault:\)/\15\2/" inittab
分析:
"s/\(id:\)[0-6]\(:initdefault:\)/\15\2/"
xxxxxxxxxx
#也可以写成:
[root@node1 ~]# sed -r "s/(id:)[0-6](:initdefault:)/\15\2/" inittab