shell中的文本处理工具之sed

sed 命令

1.命令格式:

  • sed 参数 命令 处理对象
  • sed 参数 处理对象 -f 处理规则文件
    -f表示:指定我们的命令规则储存文件
    -n静默模式:不把模式空间里的东西显示出来
    在这里插入图片描述

2.对字符的处理

字符作用
p显示
d删除
a添加
c替换
w写入
i插入
r整合文件

具体用法:
【1】 p 显示
-e表示多条策略

命令作用
sed -n 5p westos显示第五行
sed -n 3,5p westos显示3到5行
sed -ne "3p;5p westos显示3和5行
sed -ne 1,5p westos显示1-5行
sed -ne ‘5,$p’ westos显示5到最后一行
sed -n ‘/^#/p’ fstab显示以#开头的行

练习:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【2】d 删除

命令作用
sed 5d westos删除第五行
sed ‘/^#/d’ fstab把#开头的行删除
sed ‘/^UUID/!d’ fstab除了UUID以外的行都删除
sed -e ‘5,$d’ westos删除5到最后一行

练习:

  • 删除第5行
    在这里插入图片描述
  • 把#开头的行删除
    在这里插入图片描述
  • 只保留UUID这行,其余的都删除掉
    在这里插入图片描述
  • 删除5到最后一行
    在这里插入图片描述

【3】 a 添加

命令作用
sed -e ‘$a 开心’ fstab最后一行添加
sed -e ‘$a 开\n心’ fstab会换行添加
sed -e ‘/^#/a 开心’ fstab所有以#开头的行后添加

练习:

  • sed -e ‘$a 开心’ fstab 最后一行添加
    在这里插入图片描述
  • sed -e ‘$a 开\n心’ fstab 会换行
    在这里插入图片描述
  • sed -e ‘/^#/a 开心’ fstab 所有以#开头的行
    在这里插入图片描述

【4】 c 替换

命令作用
sed -e ‘/^#/c hello world’ fstabfstab中所有以#开头的行,都被替换
sed ‘6chello world’ westos将第6行替换为
  • sed -e ‘/^#/c hello world’ fstab fstab中所有以#开头的行,都被替换为
    在这里插入图片描述
  • sed ‘6chello world’ westos 将第6行替换为

在这里插入图片描述【5】w 把符合的行写到指定文件中

命令作用
sed ‘/^UUID/w westofile’ fstab把westos中UUID开头的行写入westosfile中

练习:
在这里插入图片描述
在这里插入图片描述
注意sed '/bash$/w haha' westos 将westos中的以bash为结尾的行写入到haha中,作用与grep bash westos > xixi 是相同的

【6】i插入

命令作用
sed ‘5ihello westos’ westos插入

在这里插入图片描述
【7】r 整合文件

命令作用
sed ‘5r haha’ westos将haha中的内容整合到第5行的下面

练习:
在这里插入图片描述
3.sed 字符替换用法

sed 字符替换
	sed 's/:/###/g' westos  将:替换为###
	sed 's/:/###/' westos    仅第一个被替换 
	sed '1,5s/:/###/g' westos  1-5行
	sed '1s/:/###/g' westos     第1行
	sed '1s/:/###/g;5s/:/###/g' westos   第1行和第5行

	sed '/lp/,/shutdown/s/:/###/g' westos 
	sed 's/\//####/g' westos   替换westos中的/
	sed 's@/@####@g' westos 
	sed 's@/@####@g' -i westos 把sed处理的内容保存到westos文件中

练习:

  • 1-5行 + 第1行和第5行
    在这里插入图片描述
  • sed ‘/lp/,/shutdown/s/😕###/g’ westos
    在这里插入图片描述
    在这里插入图片描述
  • sed ‘s///####/g’ westos 替换westos中的/
当需要替换 / 时,需要\转译,不能直接s///##/g
或者使用@,因为分隔符的表示方法有两种,一种是/另一种是@

在这里插入图片描述

  • sed ‘s@/@####@g’ -i westos 把sed处理的内容保存到westos文件中
    以上操作没有改变原文件内容,使用-i把处理后的诶荣可以保存到westos中
    在这里插入图片描述

练习脚本Apache_port.sh

问题:此脚本后接入数字,http的端口就改为此数字。(假设selinux为关闭状态)
在这里插入图片描述
以下展示了思考过程

  • 用脚本安装apache
    &>/dev/null 表示不显示信息
  1 #!/bin/bash
  2 [-e "/etc/httpd/conf/httpd.conf" ] || {
  3         yum install httpd -y &>/dev/null 
  4 }

在这里插入图片描述

  • 判断数字是否为空
[ -z "$1"] && {
	echo "Error:not port number.Please give port folowing script"
	exit
}
  • 如果不为空,则还需判断端口是否正在被使用
    注意:" "之间要有``,否则就会出错
[root@xixi ~]# [ -z "`netstat -antlupe | grep 1111`" ] && echo yes || echo no
yes   正确的
[root@xixi ~]# [ -z "netstat -antlupe | grep 1111" ] && echo yes || echo no
no    错误的
[root@xixi ~]# [ -z "`netstat -antlupe | grep 21`" ] && echo yes || echo no
no
[root@xixi ~]# [ -z "`netstat -antlupe | grep 6666`" ] && echo yes || echo no
yes
[root@xixi ~]#

在这里插入图片描述
此时能判断出端口是否正在被使用
在这里插入图片描述

  • 一定不要忘记-i插入,如果只使用-c替换的话,原文件不会被修改,只会把替换后文件中的内容显示出来
    在这里插入图片描述
    难点:
    修改后,直接变为了 Listen $1
    在这里插入图片描述
    这是因为使用的是单引号,改为双引号就好了
    在这里插入图片描述

  • 验证
    在这里插入图片描述
    注意:
    执行优先级
    反向单引号表示:里面的内容优先执行
    反向单引号与 $ 通用的级别不一样,$在shell里用,``在python里面也能使用
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值