shell基础(三)

目录

一,正则表达式

1,基础正则

2,扩展正则

3,常见正则表达式

二,文件操作四剑客

1,grep进阶

2.egrep

3,find进阶

4,sed

5,awk


一,正则表达式

1,基础正则

a)查找特定字符 cat test.txt | grep -n 'was'

b)利用\[\]查找集合字符 cat test.txt | grep -n 'shiort' 匹配i或者o

cat test.txt | grep -n '\^w' 排除w

cat test.txt | grep -n 'a-hoo'

cat test.txt | grep -n '0-9'

c)查找行首"^"与行尾"$"

cat test.txt | grep -n '^A-Z'

cat test.txt | grep '\.$' \ 为转义符

d)查找任意一个字符"."与重复字符"*"

cat test.txt | grep -n 'w..d'

cat test.txt | grep -n 'ooo*'

e)查找连续的字符范围"{}",需要使用转义符,"\{\}"

cat test.txt | grep -n 'o\{2\}'

cat test.txt | grep -n 'wo\{2,5\}d'

cat test.txt | grep -n 'wo\{2,\}d'

2,扩展正则

a)+,重复一个或一个以上的前一个字符

cat test.txt | grep -nE 'wo+d' 或者

cat test.txt | egrep -n 'wo+d'

b)?,零个或者一个前一个字符

cat test.txt | egrep -n 'bes?t'

c)|,使用或者的方式找出多个字符

cat test.txt | egrep -n 'of|is|on'

d)(),查找组字符串

cat test.txt | egrep -n 't(a|e)st'

e)()+,辨别多个重复的组

cat test.txt | egrep -n 'A(xyz)+C'

3,常见正则表达式

3.1数字

"^0-9*1-90-9*$" //正整数

"^((-\d+)|(0+))$" //非正整数(负整数 + 0)

"^-0-9*1-90-9*$" //负整数

"^-?\d+$" //整数

"^\d+(\.\d+)?$" //非负浮点数(正浮点数 + 0)

"^((0-9+\.0-9*1-90-9*)|(0-9*1-90-9*\.0-9+)|(0-9*1-90-9*))$" //正浮点数

"^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮点数(负浮点数 + 0)

"^(-?\d+)(\.\d+)?$" //浮点数

3.2字符串

"^A-Z+$" //由26个英文字母的大写组成的字符串

"^a-z+$" //由26个英文字母的小写组成的字符串

"^A-Za-z0-9+$" //由数字和26个英文字母组成的字符串

"^\w+$" //由数字、26个英文字母或者下划线组成的字符串

3.3Email

"^\\w-+(\.\\w-+)*@\\w-+(\.\\w-+)+$" //email地址

"^(w-.+)@((\[0-9{1,3}.0-9{1,3}.0-9{1,3}.)|((w-+.)+))(a-zA-Z{2,4}|0-9{1,3})(]?)$" //Email

3.4Url

"^a-zA-z+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url

3.5IP

"^(d{1,2}|1dd|20-4d|250-5).(d{1,2}|1dd|20-4d|250-5).(d{1,2}|1dd|20-4d|250-5).(d{1,2}|1dd|20-4d|250-5)$" //IP地址

3.6Tel

/^((\+?0-9{2,4}\-0-9{3,4}\-)|(0-9{3,4}\-))?(0-9{7,8})(\-0-9+)?$/ //电话号码

3.7日期校验

/^(d{2}|d{4})-((0(1-9{1}))|(11\|2))-((0-2(1-9{1}))|(30\|1))$/ // 年-月-日 yyyy-MM-dd / yy-MM-dd 格式

"^0-9{4}-((0(1-9{1}))|(11\|2))-((0-2(0-9{1}))|(30\|1))$" // 年-月- 日 yyyy-MM-dd 格式

/^((0(1-9{1}))|(11\|2))/((0-2(1-9{1}))|(30\|1))/(d{2}|d{4})$/ // 月/日/年

二,文件操作四剑客

1,grep进阶

选项

-r 递归扫描指定目录下的每一个文件

-l 只显示匹配到指定关键字的文件名,而不是文件内容

案例

查看/etc目录下所有包含bash的文件名

grep -rl bash /etc

2.egrep

完美支持正则表达式

3,find进阶

3.1按照权限查找 -perm

3.2按照时间戳查找

-atime

-mtime

-ctime

3.4 -exec

find /var/spool/mail -type f -exec rm -rf {} \;

3.5 xargs

find /var/spool/mail -type f | xargs rm -rf

4,sed

4.1语法

sed 选项 '操作' 参数

sed 选项 -f scriptfile 参数

4.2选项

-e:表示用指定命令或脚本处理

-f:指定脚本文件

-h:帮助

-n:表示仅显示处理后的结果

-i:直接编辑文本文件

-r:支持扩展正则

4.3操作

a:增加,在当前行下面以行增加指定内容

c:替换,将选定行替换

d:删除,删除指定行

i:插入,在选定行的上面插入一行

p:打印

s:替换,替换指定字符

y:字符转换

5,awk

5.1语法

awk 选项 '模式或条件{编辑命令}' 文件1 文件2 ...

awk -f 脚本文件 文件1 文件2 ...

5.2选项

-F 指定每行的分隔符

默认分隔符为空格

5.3内建变量

FS:指定每行的分隔符

NF:指定当前处理行的字段个数

NR:当前处理行的行号

$0:当前处理行的整行内容

$n:当前处理的第n个字段

FILENAME:处理文件名

RS:数据记录分隔,默认是\n

5.4案例

a)按行输出

awk '{print}' test.txt #等同cat

awk 'NR>=1&&NR<=3{print}' test.txt

awk 'NR==1,NR==3{print}' test.txt #打印1到3行

awk 'NR%2==0{print}' test.txt #打印偶数行

b)按段输出

默认以"空格"分段!

ifconfig ens33 |awk '/netmask/{print $2}' #筛选IP地址

cat /etc/shadow | awk -F : '2=="!!"{print 1}' #打印不能登录系统的用户

c)调用shell命令

cat /etc/passwd | awk -F : '/bash$/{print | "wc -l"}' /etc/passwd #统计能够登录系统的用户个数

相关推荐
逸模6 小时前
告别熬夜手工整理台账,逸模智能归集实现项目数据自动化存档
大数据·运维·人工智能·笔记·其他·信息可视化·自动化
sbjdhjd6 小时前
Redis 主从复制、哨兵高可用与 Cluster 集群部署实验手册
运维·前端·redis·云原生·开源·bootstrap·html
AOwhisky6 小时前
MySQL 学习笔记(第四期):SQL 语言之多表查询
linux·运维·网络·数据库·笔记·学习·mysql
Phantom Void6 小时前
服务器处理客户端请求的设计方法
linux·运维·网络
司悠7 小时前
【解决在vscode里开服务器登录codeX后发消息会一直reconnecting】
服务器·ide·vscode
倔强的石头1067 小时前
Fooocus开源神器+cpolarAI让绘画告别服务器依赖
运维·服务器·cpolar
Ajie'Blog7 小时前
Copilot Agent Tasks API 开放:AI 编程开始进入后台任务时代
服务器·前端·javascript·人工智能·copilot·ai编程
wei_shuo7 小时前
服务器挂了等用户投诉才发现?我用Beszel搭了轻量监控系统,宕机第一时间通知我
运维·服务器
王码码20357 小时前
多台服务器怎么统一看状态?Beszel 轻量监控,搭起来不费事
运维·服务器·后端·安全·阿里云·接口·web
剑神一笑8 小时前
Linux ls 命令深度解析:从目录遍历到颜色输出的实现原理
linux·服务器·数据库