Shell基础学习---4、文本处理工具、综合应用案例(归档文件、发送信息)

news/2024/11/22 22:11:45/

1、文本处理工具

1.1 cut

cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
1、基本语法
cut [选项参数] filename
说明:默认分割符是制表符
2、选项参数说明

选项参数功能
-f列号,提取第几列
-d分隔符,按照指定分隔符分割列,默认是制表符“\t”
-c按字符进行切割,后加n表示取第几列

3、案例实操
(1)切割cut.txt第二列(分割符为默认的制表符)
在这里插入图片描述

(2)切割cut.txt的2、3列
在这里插入图片描述
(3)从cut.txt文件中切割出best
在这里插入图片描述
注意:grep是行搜索!!!
(4)切割ifconfig后打印的IP地址
在这里插入图片描述

1.2 awk

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行处理。
1、基本语法

awk [选项参数]  '/pattern1{action}  /pattern/{action2}...' filenamepattern :表示awk在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令 

2、选项参数说明

选项参数功能
-F指定输入文件分隔符
-v赋值一个用户定义变量

3、案例实操

(1)数据准备。

cp /etc/passwd ./

(2)搜索passwd文件以root关键字开头的所有行,并输出该行的第七列。

awk -F : '/^root/{print $7}' passwd 

在这里插入图片描述
(3)搜索passwd文件以root关键字开头的所有行,并输出该行的第一列和第七列,中间用“,”隔开。

awk -F : '/^root/{print $1","$7}' passwd 

在这里插入图片描述
注意:只有匹配了pattern的行才会执行action
(4)只显示passwd的第一列和第七列,以都好分割,且在所有行前面添加列名“good good study”,在最后一行添加“day day up”。

awk -F : 'BEGIN{print "good good study"} {print $1","$7} END{print "day day up"}' passwd 

在这里插入图片描述
注意:BEGIN在所有数据读取之前执行;END在所有数据执行之后执行
(5)将passwd文件中的用户id增加数值1并输出

awk -v i=1 -F : '{print $3+i}' passwd 

在这里插入图片描述
4、awk的内置变量

变量说明
FILENAME文件名
NR已读的记录数
NF浏览记录的域的个数

5、案例实操
(1)统计passwd文件名,每行的行号,每行的列数

 awk -F : '{print "filename:" FILENAME ",linenum" NR ",col" NF}' passwd 

在这里插入图片描述
(2)查询ifconfig命令输出结果中的空行所在的行号

ifconfig | awk '/^$/{print NR}'

在这里插入图片描述
(3)切割IP

ifconfig ens33 | awk '/netmask/ {print $2}'

在这里插入图片描述

2、综合应用案例

2.1 归档文件

实际生产应用中,往往需要对重要数据进行归档备份。
需求:实现一个每天对指定目录归档备份的脚本,输入一个目录名称(末尾不带/),将目录下所有文件按天归档保存,并将归档日期附加在归档文件名上,放在/root/archive下。
这里用到了归档命令:tar
后面可以加上-c选项表示规定,加上-z选项表示同时进行压缩,得到的文件后缀名为tar.gz。

#!/bin/bash#首先判断输入参数个数是否为1
if [ $# -ne 1 ]
then echo "参数个数错误!应该输入一个参数,作为归档目录名"exit
fi#从参数中获取目录名称if[ -d  $i ]
then echo 
elseecho echo "目录不存在!"echo exit
fiDIR_NAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1);pwd)#获取当前日期
DATE=$(date +%y%m%d)#定义生成的归档文件名称
FILE =archive_${DIR_NAME}_$DATE.tar.gz
DEST=/root/archive/$FILE#开始归档目录文件echo "开始归档..."
echotar -czf $DEST $DIR_PATH/$DIR_NAMEif [ $? -eq 0 ]
then echo echo "归档成功"echo "归档文件为:$DEST"echo
else echo "归档出现问题"echo
fiexit

在这里插入图片描述

2.2 发送信息

我们可以利用Linux自带的mesg和write工具,向其他用户发送信息。
需求:实现一个向用户快速发送信息的脚本,输入用户名作为第一个参数,后面直接更要发送的信息。脚本需要检测用户是否登录在系统中、是否打开消息功能,以及当前发送信息是否为空。
#!/bin/bash#查看用户是否登录
login_user=$(who | grep -i -m 1 $1  | awk '{print $1}')if [ -z $login_user ]
thenecho "$1 不在线"echo "脚本退出"exit
fi#查看用户是否开启消息功能
is_allowed=$(who -T | grep -i -m 1 $1  | awk '{print $2}')if [ $is_allowed  != "+"  ]
thenecho "$1 没有开启消息功能"echo "脚本退出"exit
fi#确认是否有消息发送if [ -z $2  ]
thenecho "没有消息发送"echo "脚本退出"exit
fi#从参数中获取要发送的消息
whole_msg=$(echo $* | cut -d " " -f 2- )#获取用户登录的终端
user_terminal=$(who | grep -i -m 1 $1  | awk '{print $2}')#写入要发送的消息
echo $whole_msg | write $login_user $user_terminalif [ $? != 0 ]
thenecho "发送失败!"
elseecho "发送成功"
fiexit

1、发送方
在这里插入图片描述
2、接受方
在这里插入图片描述


http://www.ppmy.cn/news/70416.html

相关文章

JMX vs JFR:谁才是最强大的JVM监控利器?

大家好,我是小米!今天我们来聊一聊JVM监控系统,特别是关于JMX和JFR的使用。你是否有过在线上应用出现性能问题时,无法准确获取关键指标的困扰呢?那么,不妨听听我给大家带来的解决方案。 什么是JMX 首先&a…

C# TimeSpan的使用

TimeSpan:表示一个时间间隔。使用实例如下: TimeSpan m_timeSpan new TimeSpan(10,10,10); 1、TimeSpan初始化 TimeSpan(Int32, Int32, Int32) 将 TimeSpan 结构的新实例初始化为指定的小时数、分钟数和秒数。 TimeSpan(Int32, Int32, Int32, I…

DBCO-COOH分子量:305.3,CAS:1353016-70-2,二苯基环辛炔-羧基;类似有DBCO-NH2、SH、MAL、NHS等等

中文名称:二苯基环辛炔-羧基 英文名称:DBCO-acid 英文别称:DBCO-COOH cas: 1353016-70-2 分子式:C19H15NO3 分子量:305.3 DBCO-COOH是DBCO 衍生化的常用构件,在EDC、DCC和HATU等活化剂存在下&#xf…

全电发票时代,记账凭证不用再打印了!

—政策通告— 为进一步推进电子发票应用和推广实施工作,助力国家数字经济发展,国家档案局会同财政部、商务部、国家税务总局总结三批增值税电子发票电子化报销、入账、归档试点经验,依据国家相关法律法规和标准规范,编制形成了《…

VScode启动报错:Error: command ‘pyright.createtypestub‘ already exists

新安装了vscode,启动时报错, 2023-05-15 09:12:19.064 [info] [Info - 9:12:19 AM] (7176) Pylance language server 2023.5.20 (pyright 009aef31) starting 2023-05-15 09:12:19.064 [info] [Info - 9:12:19 AM] (7176) Server root directory: c:\…

Kali-linux使用OpenVAS

OpenVAS(开放式漏洞评估系统)是一个客户端/服务器架构,它常用来评估目标主机上的漏洞。OpenVAS是Nessus项目的一个分支,它提供的产品是完全地免费。OpenVAS默认安装在标准的Kali Linux上,本节将介绍配置及启动OpenVAS。…

Python面试题汇总:高效备战技巧

Python面试题汇总:高效备战技巧 一、基础知识准备1 语言特点及优缺点2 数据类型3 运算符4 控制流程语句5 函数 二、面向对象编程1 面向对象编程基础2 类的创建及继承3 魔术方法4 多态5 设计模式 三、常用数据结构与算法1 字符串、列表、字典、集合字符串列表字典集合…

Python并发编程:多线程与多进程实践

Python并发编程:多线程与多进程实践 一、并发编程基础概念1.1 什么是并发编程1.2 为什么需要并发编程1.3 并发编程的挑战 二、Python并发编程介绍2.1 Python的多线程模块2.2 Python的多进程模块2.3 协程与异步IO编程 三、Python多线程编程实践3.1 线程的创建3.2 线程…