当前位置: 首页 > ops >正文

Linux笔记13——shell编程基础-7

补充

1.printf '%s\t%s' 字符串 中,\t一定不要加双引号,这一点和在awk中使用的时候有所不同

2.其中%s也可以写成%ns,n可以被用来设置列宽,默认右对齐

#打印输出文件系统的使用情况
[root@localhost ~]# printf '%-30s\t%s\n' $(df -h | awk '{print $1"\t"$(NF-1)}')
文件系统                  	已用%
devtmpfs                     0%
tmpfs                        0%
tmpfs                        3%
/dev/nvme0n1p3               11%
/dev/nvme0n1p1               13%
tmpfs                        0%
或
[root@localhost ~]# df -h | awk '{printf "%-20s\t%s\n",$1,$(NF-1)}'
文件系统                	已用%
devtmpfs            	0%
tmpfs               	0%
tmpfs               	3%
/dev/nvme0n1p3      	11%
/dev/nvme0n1p1      	13%
tmpfs               	0%

3.若想要在包含匹配中调用变量,则需要使用单引号

[root@localhost ~]# awk '$2~/[un]/{print $0}' cut.txt 
1	xqian	83	75	93
2	xsun 	74	96	63
[root@localhost ~]# name=un[root@localhost ~]# awk '$2~/['$name']/{print $0}' cut.txt 
1	xqian	83	75	93
2	xsun 	74	96	63#若使用双引号则没有任何用处
[root@localhost ~]# awk '$2~/["$name"]/{print $0}' cut.txt 
0	xzhao	95	59	78
1	xqian	83	75	93
2	xsun 	74	96	63

4.若内存使用率超过15%,则打印红色的内存超标,当前使用率是多少

[root@localhost ~]# free -htotal        used        free      shared  buff/cache   available
Mem:           1.9Gi       419Mi       1.2Gi       7.0Mi       455Mi       1.5Gi
Swap:          2.0Gi          0B       2.0Gi
[root@localhost ~]# cat jiance.sh 
#!/bin/bash
mem=$(printf '%.f\n' $(free | awk '/Mem/{print $3/$2*100}'))
[ $mem -gt 15 ] && echo -e "\e[31m内存超标,当前使用率是$mem%\e[0m" 
[root@localhost ~]# bash jiance.sh 
内存超标,当前使用率是22%
[root@localhost ~]# 

5.取总的cpu使用率

[root@localhost ~]# top -n 1 | awk '/%Cpu/{printf "%.f\n",$2+$4}'
3

sed命令

功能:实现非交互式对文件进行选取、替换、删除、新增等操作的命令,即不进入文本对其内容进行修改;主要包括读取、执行和显示三个过程

格式:sed [选项]  '动作'  文件名

选项

  • -n:将经过处理后的数据输出到控制台上;不加-n输入全文+指定行
  • -i:直接修改文件内容;默认下sed不会对文件直接修改,而是在内存中修改并将结果显示在控制台

动作

  • p:打印,输出指定行
  • a:追加,在当前行后追加一行或多行
  • i:插入,在当前行前插入一行或多行
  • d:删除,删除指定的一行或多行
  • c:整行替换,用c后面的字符串替换元数据指定行的数据
  • s:字符替换,用一个字符串替换另外一个字符串,格式“行范围s/旧字符/新字符/g”

数据准备

[root@localhost ~]# cat cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
2	xsun 	74	96	63

查看

1.显示cut.txt中第三行的信息
[root@localhost ~]# sed '3p' cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
1	xqian	83	75	93
2	xsun 	74	96	63[root@localhost ~]# sed -n '3p' cut.txt 
1	xqian	83	75	932.显示第二行到第四行的信息,查看连续的多行
[root@localhost ~]# sed -n '2,4p' cut.txt 
0	xzhao	95	59	78
1	xqian	83	75	93
2	xsun 	74	96	633.显示第二行和第四行的信息,查看不连续的多行
[root@localhost ~]# sed -n '2p;4p' cut.txt 
0	xzhao	95	59	78
2	xsun 	74	96	634.查看符合条件的行,支持正则,扩展正则要使用转义符
[root@localhost ~]# sed -n '/a/p' cut.txt 
0	xzhao	95	59	78
1	xqian	83	75	93[root@localhost ~]# sed -n '/[23]\?/p' cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
2	xsun 	74	96	63
[root@localhost ~]# sed -n '/[23]/p' cut.txt 
1	xqian	83	75	93
2	xsun 	74	96	63

追加

1.追加,不加-i不改变元数据
#在指定行后面追加
[root@localhost ~]# sed '3a 12\txli\t80\t90\t100\t' cut.txt
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
12	xli	80	90	100	
2	xsun 	74	96	63
#在指定行前面追加
[root@localhost ~]# sed '3i 12\txli\t80\t90\t100\t' cut.txt
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
12	xli	80	90	100	
1	xqian	83	75	93
2	xsun 	74	96	632.改变元数据
[root@localhost ~]# sed -i '3i 12\txli\t80\t90\t100\t' cut.txt
[root@localhost ~]# cat cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
12	xli	80	90	100	
1	xqian	83	75	93
2	xsun 	74	96	633.-a和-i可以在指定位置追加多行
[root@localhost ~]# sed '3a 100 zhangsan \n200 lisi' cut.txt
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
100 zhangsan 
200 lisi
2	xsun 	74	96	63

删除

1.删除第三行的数据
[root@localhost ~]# sed '3d' cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
2	xsun 	74	96	632.删除第二行到第四行的数据,删除多行数据
[root@localhost ~]# sed '2,4d' cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
2	xsun 	74	96	633.删除第二行和第四行的数据
[root@localhost ~]# sed '2d;4d' cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
12	xli	80	90	100	
2	xsun 	74	96	634.删除第三行的元数据,加上-i选项才能更改元数据
[root@localhost ~]# sed -i '3d' cut.txt 
[root@localhost ~]# cat cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
2	xsun 	74	96	63

替换

1.将第三行内容整行替换
[root@localhost ~]# sed '3c No such person' cut.txt  
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
No such person
2	xsun 	74	96	632.将第三行中的x替换成xiao
[root@localhost ~]# sed '3s/x/xiao/g' cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xiaoqian	83	75	93
2	xsun 	74	96	633.将所有行中的x替换成xiao
[root@localhost ~]# sed 's/x/xiao/g' cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xiaozhao	95	59	78
1	xiaoqian	83	75	93
2	xiaosun 	74	96	634.将指定的一行内容替换成空
[root@localhost ~]# sed '3s/[0-9]//g' cut.txt
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78xqian			
2	xsun 	74	96	635.同时替换多行,用;隔开
[root@localhost ~]# sed '3s/^/#/g;4s/[0-9]//g' cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
#1	xqian	83	75	93xsun 			6.加上-i选项更改元数据
[root@localhost ~]# sed -i '3s/^/#/g;4s/[0-9]//g' cut.txt 
[root@localhost ~]# cat cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
#1	xqian	83	75	93xsun 			

sed命令练习

问题1:关闭selinux

想要关掉selinux,用sed命令修改配置文件

[root@localhost ~]# sed '22s/disabled/enforcing/' /etc/selinux/config 

问题2:校验整数

接收客户端输入,若是纯整数则打印是整数,否则打印格式不正确

[root@localhost ~]# cat num.sh 
#!/bin/bash
read -p "please enter a num:" num
jq=$(echo $num | sed 's/[0-9]//g')
[ -z "$jq" ] && echo 是整数 || echo 格式不正确[root@localhost ~]# bash num.sh 
please enter a num:123
是整数[root@localhost ~]# bash num.sh 
please enter a num:12d
格式不正确

问题3:修改网卡配置

用sed命令修改网卡配置文件,进行IP地址获取方式的切换

1.读取当前使用的网卡名
[root@localhost ~]# ip add | grep "inet[^6]" | grep -v "127" | awk '{print $NF}'
ens160
2.将较长的配置文件名赋予变量
[root@localhost ~]# interface=`ip add | grep "inet[^6]" | grep -v "127" | awk '{print $NF}'`
[root@localhost ~]# cf="/etc/NetworkManager/system-connections/$interface.nmconnection"
3.查看当前网卡配置,并显示行号
[root@localhost ~]# cat -n $cf1	[connection]2	id=ens1603	uuid=4c163b33-6eca-3917-b856-9bff2df0e9474	type=ethernet5	autoconnect-priority=-9996	interface-name=ens1607	timestamp=17555496048	9	[ethernet]10	11	[ipv4]12	method=manual13	address=192.168.66.66/24,192.168.66.214	dns=202.106.0.2015	16	[ipv6]17	addr-gen-mode=eui6418	method=auto19	20	[proxy]
4.将ip地址改为手动获取(真实实验中需要加-i选项)
[root@localhost ~]# sed '12s/auto/manual/' $cf
5.手动添加ip地址、掩码、网关和dns(真实实验中需要加-i选项)
[root@localhost ~]# sed '12a address=192.168.66.66/24,192.168.66.2\ndns=202.106.0.20' $cf

http://www.xdnf.cn/news/19069.html

相关文章:

  • 基于SpringBoot和Thymeleaf开发的英语学习网站
  • ubuntu24.04 QT中配置opencv4.12
  • FreeRTOS基础知识记录
  • MySQL 中有哪些锁类型?
  • 华为交换机S5700设置acl
  • 衡石SENSE 6.0技术解析:Workflow到Agent模式如何重塑计算框架
  • ADC模数转换
  • Android init 进程部分理论
  • 解决使用OSS的multipartUpload方法上传大文件导致内存溢出的问题
  • 设计模式-行为型模式-命令模式
  • 【编号513】2025年全国地铁矢量数据
  • 从混乱到高效:ITSM软件如何重塑企业IT管理的新格局
  • 淘宝四个月造了一个超越美团的“美团”
  • 对接印度股票市场 数据源API
  • 逻辑漏洞 跨站脚本漏洞(xss)
  • 滚珠导轨如何赋能精密制造?
  • 【技术分享】系统崩溃后产生的CHK文件如何恢复?完整图文教程(附工具推荐)
  • 采用机器学习的苗期棉株点云器官分割与表型信息提取
  • DINOv3:自监督视觉模型的新里程碑!
  • Matlab实现基于CPO-QRCNN-BiGRU-Attention注意力多变量时间序列区间预测
  • Rust:所有权
  • 音视频学习(五十九):H264中的SPS
  • 使用STM32CubeMX使用CAN驱动无刷电机DJI3508
  • VisualStudio 将xlsx文件嵌入到资源中访问时变String?
  • HTML 和 JavaScript 关联的基础教程
  • LeetCode 刷题【56. 合并区间】
  • Linux - 中文显示乱码问题解决方法(编码查看及转换)- 学习/实践
  • 【Spring Cloud微服务】6.通信的利刃:深入浅出 Spring Cloud Feign 实战与原理
  • 智能体开发:学习与实验 ReAct
  • web端播放flv视频流demo(flv.js的使用)