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

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

1、文本处理工具

1.1 cut

cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。

1、基本语法

cut [选项参数] filename

说明:默认分割符是制表符

2、选项参数说明

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

3、案例实操

(1)切割cut.txt第二列(分割符为默认的制表符)

8959b4474e0146d1b7b8549725b4c464.png

(2)切割cut.txt的2、3列

08a39ef6be9946dca0afaa4d972a74cf.png

(3)从cut.txt文件中切割出best

dd9fca51372c49b082c7c724446f361b.png

注意:grep是行搜索!!!

(4)切割ifconfig后打印的IP地址

aaff393a5bae444f8f7db60f42b6b2aa.png

1.2 awk

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

1、基本语法

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

2、选项参数说明

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

3、案例实操

(1)数据准备。

cp /etc/passwd ./

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

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

e66eed0783464375b81de9a24b327941.png

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

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

37f094ee82534d1981fba92c487b5889.png

注意:只有匹配了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 

6a095dda82af405ab6d86ad9a50fb4c2.png

注意:BEGIN在所有数据读取之前执行;END在所有数据执行之后执行

(5)将passwd文件中的用户id增加数值1并输出

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

ceea7577a68444a9a6996d51c7b254be.png

4、awk的内置变量

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

5、案例实操

(1)统计passwd文件名,每行的行号,每行的列数

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

90c93d6cf6e24febbaed119544de689d.png

(2)查询ifconfig命令输出结果中的空行所在的行号

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

146a31d3edcc45e583e08c93cfac8f9a.png(3)切割IP

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

8e55e18acb554f9780b6980ecbe33498.png

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 
else
  echo 
  echo "目录不存在!"
  echo 
  exit
fi
DIR_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 "开始归档..."
echo
tar -czf $DEST $DIR_PATH/$DIR_NAME
if [ $? -eq 0 ]
then 
  echo 
  echo "归档成功"
  echo "归档文件为:$DEST"
  echo
else 
  echo "归档出现问题"
  echo
fi
exit

825fa0c669bd4831800a26eba8100a9b.png

2.2 发送信息

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

1、发送方

b55598b962e64f799fd7432ad45b3674.png

2、接受方

0947e344c56e4ec29e3a1491629b09ef.png

相关文章
|
7天前
|
数据可视化 Shell Linux
shell+crontab+gitlab实现ecs服务器文件的web展示
本文通过把ecs服务器上的文件定时上传至gitlab,实现文件的页面可视化和修改历史。技术点:shell、crontab、gitlab。
36 3
|
22天前
|
Linux Shell Perl
Linux下的Shell基础——文本处理工具(五)
Linux下的Shell基础——文本处理工具(五)
24 1
Linux下的Shell基础——文本处理工具(五)
|
30天前
|
机器人 关系型数据库 MySQL
shell脚本实现文件自动清理并推送钉钉机器人告警
shell脚本实现文件自动清理并推送钉钉机器人告警
25 0
|
1月前
|
Shell Linux
linux删除常规文件及隐藏文件shell
linux删除常规文件及隐藏文件shell
16 6
|
29天前
|
Shell 数据安全/隐私保护
shell中的通配符 熟悉grep、cut、sort等小工具和shell中的通配符的使用
shell中的通配符 熟悉grep、cut、sort等小工具和shell中的通配符的使用
27 0
|
1月前
|
监控 Linux Shell
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(排查问题指令 - 下)
在线上排查问题时,查询日志、查看系统配置和分析操作系统信息是至关重要的。这些操作可以帮助我们深入了解软件和服务的兼容性,并解决潜在的问题。在本次学习中,我们将介绍并深入学习一些我在处理类似问题时常用的指令。通过掌握这些指令,你将能够更加高效地定位和解决线上问题,提高系统的稳定性和性能。让我们一同进入这个学习过程吧!
36 0
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(排查问题指令 - 下)
|
5天前
|
Java Shell Perl
使用shell脚本给日志文件瘦身
使用shell脚本给日志文件瘦身
|
21天前
|
监控 Shell Linux
Linux如何系统的学习shell方法
Linux如何系统的学习shell方法
21 0
|
28天前
|
供应链 Shell Linux
通过extundelete使用shell实现CentOS6 ext4文件系统误删除文件的恢复
通过extundelete使用shell实现CentOS6 ext4文件系统误删除文件的恢复
41 0
|
29天前
|
Shell
删除常规文件及隐藏文件shell脚本
删除常规文件及隐藏文件shell脚本
12 1

相关产品

  • 云迁移中心