课时109:sed命令_基础实践_内容替换

2.1.2 内容替换

学习目标

这一节,我们从 基础知识、简单实践、小结 三个方面来学习

基础知识

简介

powershell 复制代码
	sed的文本替换动作是使用频率最高的一种样式。它的基本表现样式如下:
powershell 复制代码
命令格式:
	sed -i [替换格式] [文件名]
	源数据 | sed -i [替换格式]
	
注意:替换命令的写法
	's###'  --->  's#原内容##' ---> 's#原内容#替换后内容#'
	隔离符号 / 可以更换成 @、#、!等符号
powershell 复制代码
表现样式:
    样式一:替换指定匹配的内容
        sed -i '行号s#原内容#替换后内容#列号' [文件名]
        echo "源数据" | sed -i '行号s#原内容#替换后内容#列号'
    样式二:替换所有的内容
        sed -i 's#原内容#替换后内容#g' [文件名]
    	echo "源数据" | sed -i '行号s#原内容#替换后内容#g'
    样式三: 替换指定的内容
    	sed -i '行号s#原内容#&新增信息#列号' [文件名]
    	- 这里的&符号代表源内容,实现的效果是 '原内容+新内容'

简单实践

实践1-替换每行首个匹配内容

powershell 复制代码
格式:sed -i 's#原内容#替换后内容#' 文件名

替换首每行的第1个sed为SED
[root@localhost ~]# sed -i 's#sed#SED#' sed.txt 
[root@localhost ~]# cat sed.txt 
nihao SED1 sed2 sed3
nihao SED4 sed5 sed6
nihao SED7 sed8 sed9

实践2-替换全部匹配内容

powershell 复制代码
格式:sed -i 's#原内容#替换后内容#g' 文件名

替换全部sed为des
[root@localhost ~]# sed -i 's#sed#SED#g' sed.txt 
[root@localhost ~]# cat sed.txt 
nihao SED1 SED2 SED3
nihao SED4 SED5 SED6
nihao SED7 SED8 SED9

关于全部替换还有另外一种命令叫直接转换 y
[root@localhost ~]# sed 'y/SED/sed/' sed.txt
nihao sed1 sed2 sed3
nihao sed4 sed5 sed6
nihao sed7 sed8 sed9

实践3-指定行号替换首个匹配内容

powershell 复制代码
格式:sed -i '行号s#原内容#替换后内容#' 文件名

替换第2行的首个SED为sed
[root@localhost ~]# sed -i '2s#SED#sed#' sed.txt 
[root@localhost ~]# cat sed.txt 
nihao SED1 SED2 SED3
nihao sed4 SED5 SED6
nihao SED7 SED8 SED9

实践4-首行指定列号替换匹配内容

powershell 复制代码
格式:sed -i 's#原内容#替换后内容#列号' 文件名

替换每行的第2个SED为sed
[root@localhost ~]# sed -i 's#SED#sed#2' sed.txt
[root@localhost ~]# cat sed.txt 
nihao SED1 sed2 SED3
nihao sed4 SED5 sed6
nihao SED7 sed8 SED9

实践5-指定行号列号匹配内容

powershell 复制代码
格式:sed -i '行号s#原内容#替换后内容#列号' 文件名

替换第3行的第2个SED为sed
[root@localhost ~]# sed -i '3s#SED#sed#2' sed.txt 
[root@localhost ~]# cat sed.txt 
nihao SED sed2 SED3
nihao sed4 SED5 sed6
nihao SED7 sed8 sed9

实践6-综合实践

powershell 复制代码
借助正则的分组功能实现ip地址获取
[root@localhost ~]# ifconfig eth0 | sed -n '2p' | sed -r 's#.*inet (.*) net.*#\1#'
10.0.0.12
[root@localhost ~]# ifconfig eth0 | sed -n '2p' | sed -r 's#.*inet ##' | sed -r 's# net.*##' 
10.0.0.12

借助正则的分组功能实现信息的精确获取
[root@localhost ~]# echo '/etc/sysconfig/network' | sed -r 's#(.*\/)([^/]+\/?$)#\2#'
network
[root@localhost ~]# echo '/etc/sysconfig/network' | sed -r 's#(.*\/)([^/]+\/?$)#\1#'
/etc/sysconfig/

小结

复制代码
相关推荐
cuisidong199724 分钟前
如何在 Kali Linux 上安装 Google Chrome 浏览器
linux·运维·chrome
光通信学徒1 小时前
ubuntu图形界面右上角网络图标找回解决办法
linux·服务器·ubuntu·信息与通信·模块测试
南种北李1 小时前
Linux自动化构建工具Make/Makefile
linux·运维·自动化
小飞猪Jay1 小时前
面试速通宝典——10
linux·服务器·c++·面试
暗恋 懒羊羊2 小时前
Linux 生产者消费者模型
linux·开发语言·ubuntu
安红豆.3 小时前
Linux基础入门 --13 DAY(SHELL脚本编程基础)
linux·运维·操作系统
..空空的人3 小时前
linux基础指令的认识
linux·运维·服务器
penny_tcf3 小时前
Linux基础命令halt详解
linux·运维·服务器
荣世蓥4 小时前
10.2 Linux_进程_进程相关函数
linux·运维·服务器
安全不再安全5 小时前
Linux 安装 yum
linux·运维·centos