shell 基本语法第四讲之(find(文件查找)、xargs(字符串拼凑)、sed(处理文本)、awk(文本处理)、crontab(系统定时器))

news2025/1/12 3:00:21

20、find(文件查找)

  • 格式

find pathname -options [-print -exec -ok …]

命令说明举例
-name按照文件名查找文件。find . -name “1.txt”
-perm按照文件权限来查找文件。find . -perm 660
-user按照文件属主来查找文件。
-group按照文件所属的组来查找文件。
-mtime -n +n按照文件的更改时间来查找文件,
-n表示文件更改时间距现在n天以内,
+n表示文件更改时间距现在n天以前。
find命令还有-atime和-ctime 选项,但它们都和-m time选项。
-atime访问时间
-ctime创建时间
-nogroup查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2查找更改时间比文件file1新但比文件file2旧的文件。
-type查找某一类型的文件
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
s - socket文件
-size查找文件大小
-exec
#查找当前目录下名称为aa.sh的文件路径
find . -name "aa.sh"
find . -name "*.txt*"
#查找当前目录下3天之内被更改的文件
find . -mtime +3
find . -mtime -3
find . -atime -3
#当前目录下5天之内创建的文件
find . -ctime 5
#查找普通文件
find . -type f
#查找有哪些目录
find . -type d
find . -type p
find . -type l
#查找文件大小为7个字节的文件
find . -size 7c

1、exec

  • 举例1
find . -name "*.txt" -exec gzip {} \;

说明:查找当前目录下的txt文件,并且将他打包成gzip文件
每找到一个文件,就会执行exec后面的命令
{}的作用是:将*.txt会替换到{}的位置
\;:标识当前语句的结束

  • 举例2

find . -name “*.txt” -exec cp -r {} ./mvDir/div/ ;
查找当前文件下的txt文档,并且复制到指定的目录下

在这里插入图片描述

2、ok(确认是否操作)

find . -name "*.txt" -ok rm {} \;

说明:查找当前目录下的txt文件,确认是否删除,确认的话输入y否则删除n
跟-exec用法一样,但是每找到一个符合的文件执行前需要用户是否确认

21、xargs(将标准输入的参数整齐的拼凑在一行)

将标准输入的参数整齐的拼凑在一行
单独使用该命令没什么用,要配合其他命令来使用

docker ps -aq | xargs docker stop
docker ps -aq | xargs docker rm -f 
  • 说明:
    1、将docker启动的所有容器id拼接起来,然后执行docker stop命令
    2、然后再将所有的容器id拼接起来,执行docker rm -f的删除容器操作

    在这里插入图片描述

移动文件目录

find . -name "*.sh" | xargs cp -r /shFold/
find . -name "*.sh" | xargs \cp -r /shFold \;
#将当前目录的所有sh文件,复制到shFold目录下
# 1、-I{}表示替换用的字符串
# 2、{}表示将查询到的sh文件放到{}里面 然后将{}里面的文件移动到shFold文件夹下
find . -name "*.sh" | xargs -I{} mv  {} shFold/
# 将当前目录查询到的sh文件复制到上层目录
find . -name "*.sh" | xargs -I{} \cp -r {} ../

-I{} 指定一个替换字符串作为参数替换

22、sed(处理文本)

文本1 -> sed + 脚本 -> 文本2

编辑器的演变历史ed 编辑器 -> sed -> vim

sed option ‘script’ file1 file2 … sed 参数 ‘脚本(/pattern/action)’ 待处理文件
sed option -f scriptfile file1 file2 … sed 参数 –f ‘脚本文件’ 待处理文件

命令说明
p:print打印
a:append追加
i:insert插入
d:delete删除
s:substitution替换
#将 "在第二行之后插入内容"字符插入到第二行
sed '2i 在第二行之后插入内容' sed.txt
#将sources.list文件里面所有mirrors.ustc.edu.cn的代码替换成mirrors.aliyun.com 's 开始 /g结束 正则表达式
sed 's/mirrors\.ustc\.edu\.cn/mirrors\.aliyun\.com/g' /etc/apt/sources.list
#替换文本里面的html标签
sed 's/<.*>//g' sed.txt
sed 's/<[^>]*>//g' sed.txt

23、awk(文本处理)

awk ‘条件1 {动作 1} 条件 2 {动作 2} …’ 文件名

awk支持的主要条件类型
条件类型条 件说 明
awk保留字BEGIN在 awk 程序一开始,尚未读取任何数据之前执行。BEGIN 后的动作只在程序开始时执行一次
awk保留字END在 awk 程序处理完所有数据,即将结束时执行?END 后的动作只在程序结束时执行一次
关系运算符>大于
<小于
>=大于等于
<=小于等于
==等于。用于判断两个值是否相等。如果是给变童赋值,则使用"=”
!=不等于
A~B判断字符串 A 中是否包含能匹配 B 表达式的子字符串
A!~B判断字符串 A 中是否不包含能匹配 B 表达式的子字符串
正则表达式/正则/如果在“//”中可以写入字符,则也可以支持正则表达式
命令说明
NF 字段个数,(读取的列数)
NR 记录数(行号),从1开始,新的文件延续上面的计数,新文件不从1开始
FNR 读取文件的记录数(行号),从1开始,新的文件重新从1开始计数
FS 输入字段分隔符,默认是空格
OFS 输出字段分隔符
RS 输入行分隔符,默认为换行符
ORS 输出行分隔符,默认为换行符

1、准备数据

vim awk.txt
张三  100-kg 20-age 176-height
李四  98-kg 23-age 178-height
王五  70-kg 43-age 157-height
赵六  80-kg 63-age 130-height
王二  90-kg 12-age 140-height
谢哥  140-kg 65-age 180-height
#最常见的过滤那一列
xxx | awk '{print $2}'
#打印第一列的信息 $1表示第一列 $2标识第二列
awk '{print $1}' awk.txt
#匹配 将第二列带有-kg的打印出来
awk '{print $2}-kg' awk.txt
awk '/王/{print $1}' awk.txt
awk '/^王/{print $1}' awk.txt
#打印第二列和第四列
awk '{printf $2 "\t" $4 "\n"}' awk.txt
#查看磁盘占用情况(总共容量大小 可用大小 使用百分比)
df -h | awk '{print $2 "\t" $4 "\t"  $5}'
#
top | awk '{print "\t PID=" $1 "\t cpu=" $8 "\t mem=" $9}'

2、docker中实际用例

springboot项目构建docker镜像需要
1、先停止之前启动的镜像,然后删除容器,
2、再删除镜像。
3、重新构建镜像

#查找前缀名称为tomcat的所有启动着的容器,返回第一列(即id的那一列)
containerTomcat=$(docker ps | grep "tomcat*" | awk '{print $1}')
#如果不为空
if [ -n "$containerTomcat" ]
then
    docker stop $cid #停止该容器
    docker rm -f $cid #删除该容器
else
	echo "no such container"
fi
#查找前缀名称为tomcat的所有的容器,返回第一列(即id的那一列)
docker ps -a | grep "tomcat*" | awk '{print $1}'
#查找前缀为tomcat的镜像名称,并打印出镜像id
containerImage=$(docker images | grep "tomcat*" | awk '{print $3}')
if [ -n "$containerImage"]
  then docker rmi $containerImage #删除容器
else 
  then "no such images"
fi  

3、筛选磁盘使用率超过指定数值

#$1,$2表示输出的第几列
df -hT | awk -v I=${1} '{if(NR!=1) {split($6,a,"%");if(a[1]>10){print $1 "\t"$6,$7}}}'
#cpu使用前10的进程信息
ps -eo user,pid,pcpu,pmem,args --sort=-pcpu  |head -n 10
#内存占用前10排序
ps -eo user,pid,pcpu,pmem,args --sort=-pmem  |head -n 10
#删除掉java的相关进程
ps -ef | grep java | awk '{print $3}' |  xargs kill -9

24、crontab(系统定时器)

系统定时器位置:

/etc/crontab

  • 表达式:m h dom mon dow user command
命令参数说明参数范围
mminute0-59分钟
hhour0-23小时
domday or month1-31(日)
monmonth1-12(月)
dowday or week0-7(0、7都表示周日)
user用户那个用户去执行localuser、root、…
command要执行的命令可以是系统命令,也可以是自己编写的脚本文件。

说明:

  • 17 * * * * root cd / && run-parts --report /etc/cron.hourly
    表示每个小时的17分钟 root用户 去执行后面的指令
  • 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
    每天的6点25分 去执行操作
  • 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
    每周星期日的6点47分 去执行
  • 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
    每个月的1号的6点52分去执行
命令参数说明
cron.hourly 每小时
cron.daily每天
cron.weekly每周
cron.monthly每月

举例

vim printDate.sh
#!/bin/bash
curPath=$(cd `dirname $0` ;pwd)
date >> "$curPath/date.txt"
  • 添加到定时任务中
chmod 777 /usr/local/software/cronDate/printDate.sh
vim /etc/crontab
#每分钟执行一次该文件
1-59 * * * * localuser /usr/local/software/cronDate/printDate.sh

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

西电计网实验

《计算机通信与网络》网络实验 阅读须知&#xff1a;计网六次实验均已通过线下操作进行验收&#xff08;后面两次善意线上了&#xff09;&#xff0c;写报告由于描述流程困难&#xff0c;故采用eNSP对实验内容进行复现&#xff0c;故此报告实验的过程分析都是基于eNSP&#xf…

MBSE和刚亮相的B-21“突袭者”隐形轰炸机

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> 12月2日&#xff0c;B-21“突袭者”隐形轰炸机举行揭幕仪式。 摘译一篇来自制造商Northrop Grumman公司&#xff08;诺斯罗普格鲁曼公司&#xff09;网站上的文章片段。 利…

stm32cubemx hal学习记录:CAN

一、实验内容 RM C板&#xff0c;can1给can2发送数据 二、CAN总线简介 1、控制器局域网络&#xff1a;Controller Area Network 2、异步半双工通信 3、总线制 CAN由一对差分对&#xff08;两条线&#xff09;CANH和CANL组成 CANH电压比CANL高视为逻辑0&#xff08;显性电…

IDEA插件系列(3):Easy Javadoc插件——快速生成javadoc文档注释

1.插件介绍 Easy Javadoc插件。 能帮助开发者快速生成类、方法、属性等中文javadoc 2.安装方式 第一种安装方式是在线下载安装插件。 第二种安装方式是使用离线插件进行安装。 插件下载地址&#xff1a;https://plugins.jetbrains.com/plugin/12977-easy-javadoc 3.使…

梦开始的地方—— C语言预处理+编译过程

文章目录C语言程序的编译(预处理)1.编译和链接1) 编译的几个阶段预编译阶段编译阶段汇编阶段2) 链接2. 预处理1) 预定义符号2) #define3) #和##4) 带副作用的宏参数5) 宏和函数对比3. 常见预处理命令1) #undef2) 命令行定义3) 条件编译4) 文件包含5) 实现offsetofC语言程序的编…

Spring 中 @Autowired 修饰构造方法时注意事项

代码演示 给定一个类 One&#xff0c;然后看下的几种构造方法什么时候被调用 1、假设现在只有一个默认的空构造方法&#xff0c;代码如下&#xff1a; Component public class One {}然后追踪源码&#xff0c;如下所示&#xff1a; 先拿到所有声明的构造方法 然后挨个判断构…

总结Python设置Excel单元格样式的一切,比官方文档还详细

总结Python设置Excel单元格样式的一切&#xff0c;比官方文档还详细 Python对Excel表格处理非常方便&#xff0c;本文专门对Excel单元格样式设置进行总结&#xff0c;日常用到的设置基本都可以用openpyxl库完成。 创建一个表格 openpyxl是第三方库&#xff0c;如果你还没有安…

如何撰写好的科研论文:摘要(1)

导读 本系列将切片介绍如何写好科研论文&#xff0c;包含了&#xff1a;摘要&#xff0c;背景介绍&#xff0c;方法&#xff0c;结果&#xff0c;讨论等&#xff0c;本文[1]将从摘要开始。 1. 标准 Criteriapointline一般背景听众中的每个人都关心的事情。具体背景从每个人都关…

免费内网穿透工具测评对比,谁更好用 1

文章目录1. 前言2. 对比内容1.1官网主页对比1.2 用户注册对比1.3 用户功能页面对比1.4 客户端对比3. 结语1. 前言 自从接触到内网穿透服务&#xff0c;知道能把自家的电脑、树莓派、NAS等等一堆硬件改造成服务器后&#xff0c;笔者就陷入其中无法自拔&#xff0c;一会儿把树莓…

jmeter接口测试之大家都来我家领豆子

一、测试目的&#xff1a; 2万用户不停请求云豆领取接口时&#xff0c;查看服务器内存占用情况&#xff0c;从而确认服务器内存占用异常的情况是否得到修复。 二、测试策略&#xff1a; 用2万个账号&#xff0c;以每2秒100次请求的速度向服务器发出请求&#xff0c;观察内存…

c#入门-顶级语句和Main方法

程序入口 在你运行程序以后会弹出一个窗口&#xff0c;显示一行文字&#xff1a;Hello world 现在将代码中的所有东西再复制一遍。然后运行&#xff0c;就会得到两行Hello world 显然&#xff0c;我们的程序是写在这里的。 在这里写了什么&#xff0c;什么就会生效。 Main方…

【自动化测试】Pytest+Appium+Allure 做 UI 自动化的那些事

文本主要介绍下 PytestAllureAppium 记录一些过程和经历。 法主要用了啥: Python3 Appium Allure-pytest Pytest Appium 不常见却好用的方法 Appium 直接执行 adb shell 方法 Appium 启动时增加 --relaxed-security 参数 Appium 即可执行类似adb shell的方法 appium -p 4…

短视频账号搭建之Banner图和视频封面

前面在我赢小禾呈序里学了账号名称、头像和个人简介设置&#xff0c;今天把账号搭建的最后两部分一起公开&#xff1a; banner图是你主页上面的这个主图。 同样它的存在可以有三个作用&#xff1a; 第一个作用比较简单&#xff0c;就是让你的主页更好看。 听起来太简单了&am…

【软件测试】测试人在团队中没地位?怎么办?为什么会出现这样的问题?

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 为什么会出现这样的…

Linux 学习之:如何让代码在后台保持运行

文章目录nohup 命令使用场景使用方法nohup ... &nohup ... > train.log 2>&1 &结束进程参考文章nohup 命令 使用场景 比如我要在服务器里运行如下代码来训练我的深度学习模型&#xff1a; python train.py但是这样运行你一旦合上笔记本电脑或者换个工作环…

java版商城多商家入驻商城 直播带货商城 电子商务

一个好的SpringCloudSpringBoot b2b2c 电子商务平台涉及哪些技术、运营方案&#xff1f;以下是我结合公司的产品做的总结&#xff0c;希望可以帮助到大家&#xff01; 搜索体验小程序&#xff1a;海哇 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家…

vxe table 虚拟滚动 表格每一行的高度不一致 出现空白

今天在做表格数据时&#xff0c;发现滚动表格会出现空白区域&#xff0c;如图所示 虚拟滚动表格每一行的高度不一致, 导致表格滚动时出现空白区域 然后在查阅资料时发现有设置:row-config"{height: 70}"这种 &#xff0c;试过发现不行 以下这个不可行 <vxe-grid…

论文常用 | FineBI v6.0 新图表 | 箱形图

箱形图&#xff08;Box-plot&#xff09;又称为盒须图、盒式图或箱线图&#xff0c;是一种用作显示一组数据分散情况资料的统计图&#xff0c;因形状如箱子而得名。在各种领域也经常被使用&#xff0c;常见于品质管理。它主要用于反映原始数据分布的特征&#xff0c;还可以进行…

突破重围,攻“新”为上!凯里亚德与郁锦香酒店以创新势能获投资者青睐

近日&#xff0c;汇聚国内众多投资人的锦江酒店(中国区)品牌沙龙会烟台站顺利举行。本次沙龙活动以“齐风鲁韵 锦绘未来”为主题&#xff0c;锦江酒店(中国区)旗下众多优秀品牌共同亮相。凯里亚德酒店与郁锦香酒店在本次活动中向投资人展示了在如今复杂多变的酒店市场中如何以强…

载波层叠调制在多电平变换器及两电平变换器中的应用

1. 载波层叠调制在MMC中的应用 载波层叠调制在MMC中应用广泛。通过上下桥臂的调制波和多个载波进行比较&#xff0c;得到每个桥臂应该投入的模块数。如下图所示&#xff0c;上下桥臂各有4个模块&#xff0c;每个模块的电容电压是uc&#xff0c;直流侧电压是4uc。A相下桥臂的调制…