Shell复习3

Shell复习3

1.正则表达式入门

(1)^

^是一个正则表达式的开头。

用法为:

xxx | grep ^a

意思是通过这个管道的数据找到以a为开头的数据

(2)$

$是一个正则表达式的结束

用法为:

xxx | grep b$

意思是通过这个管道的数据找到以b为结尾的数据

(3).

.是一个正则表达式匹配任意一个字符

用法为:

xxx | grep r..t

意思是通过这个管道的数据找到rxxt的数据,例如root,rxdt,raat等等

(4)*

*用法是上一个字符出现0或者多次

用法为:

xxx | grep ro*t

意思是通过一个管道的数据找到ro(0次或多次)t的数据例如rt,rot,root等等

(5).*

匹配任意字符

(6)[]

表示匹配一个范围的字符

用法为:

[6,8]

[0-9]

[a-c,e-f]

第一个意思是匹配6或8,第二个意思是匹配0到9任意一个字符,第三个意思是匹配a到c任意一个字符或者e到f任意一个字符

(7)\

表示转义字符

用法为:

xxx | grep "a\$b"

意思是匹配包含a$b的所有行

2.文本处理工具

1.cut

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

(2)参数说明

-f 列号,提取第几列

-d 分割符,默认是以\t分割

-c 指按照字符切割后取第几列

例如:

dong shen

guan zhen

wo wo

lai lai

le le

要求我们切割出guan,例如这个文件叫cut.txt

代码如下:

cat cut.txt | grep guan | cat -d " " -f 1

意思是展示cut.txt中包含guan的行并且以空格分隔,并且只取第一列

2.awk

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

(2)参数说明

-F 指定输入文件的分隔符

-v 赋值一个用户定义变量

(3)基本用法

awk [选项参数] ‘/pattern1/{action1} /pattern2/{action2}…’

filename pattern:表示 awk 在数据中查找的内容,就是匹配模式

action:在找到匹配内容时所执行的一系列命令

例如

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

代码如下:

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

意思是找到包含root的关键字为开头的行,通过:来分割,并且输出分割之后的第7列

注意:只有匹配了 pattern 的行才会执行 action。

(4)awk内置变量

FILENAME,文件名

NR,已读行数

NF,切割后列的个数

3.综合案例

发送信息:

我们可以利用 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值