shell编程基础入门-4

1、正则表达式

1.1 概述

  • 正则表达式是一种用来描述字符串模式的规则
  • 功能:检索、替换、过滤符合特定规则的字符串
    • 系统日志筛选(如定位“登录失败”“服务启动失败”)
    • 配置文件解析
    • 文本查找替换
    • 脚本编程中的条件匹配

1.2 正则表达式组成

1.2.1 元字符

  • . 匹配任意单个字符
    • 匹配任意单个字符(除 \r\n 换行符、回车符)
  • [] 匹配字符集 [a-z] [0-9] [A-Z]
    • 匹配list列表中的一个字符 例: go[ola]d,[abc]、[a-z]、[a-z0-9]
  • [^list] 匹配非集合中的字符
    • 匹配任意不在list列表中的一个字符 例: [^a-z] 、[^0-9] 、[^A-Z0-9]
  • ^ 行首
  • $ 行尾
  • \ 转义符

1.2.2 次数

  • * 0 次或多次
  匹配前面子表达式0次或者多次 例:goo*d、go.*d
  • \+ 至少 1 次
  匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
  • \{n\} 恰好 n 次
  匹配前面的子表达式n次,例:go\{2\}d、'[O-9]\{2\}'匹配两位数字
  • \{m,n\} m 到 n 次
  匹配前面的子表达式n到m次,例: go\{2,3\)d、'[0-9]\{2,3\}'匹配两位到三位数字
  • \{n,\} 至少 n 次
  匹配前面的子表达式不少于n次,例: go\{2,\}d、' [0-9]\{2,\}'匹配两位及两位以上数字

1.2.3 案例

## 查找ip
ifconfig | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+'
## shirt 或 short
grep -n 'sh[io]rt' demo
## 首行是 the
grep -n '^the' demo
## 行尾是 .
grep -n '\.$' demo
## 空行
grep -n '^$' demo
## 两个 o 的字符
grep -n 'o\{2\}' demo
## 以 w 开头以 d 结尾,中间包含 25 个 o 
grep -n 'wo\{2,5\}d' demo
## 以 w 开头以 d 结尾,中间包含 2 个或 2 个以上 o 
grep -n 'wo\{2,\}d' demo

在这里插入图片描述
在这里插入图片描述

2、常用小工具

2.1 截取-cut

cut:常用于从文本中抽取需要的字段
注意:cut只擅长于处理单个字符为间隔的文本

常用选项

  • -b:按字节截取
  • -c:按字符截取(中文推荐用 -c
  • -d:指定分隔符(默认 TAB)
  • -f:指定字段(需配合 -d
# 截取第1列
cut -d':' -f1 name
# 截取第3列
cut -d':' -f3 name
# 截取第13列        
cut -d':' -f1,3 name
# 截取第2个字符    
cat sg | cut -b 2  
cat zw | cut -c 2   

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.2 排序-sort

常用选项

  • -t:指定分隔符
  • -k:指定排序字段
  • -n:按数值排序(默认是字典序)
  • -r:降序
  • -u:去重(等价于 uniq
  • -o:输出到文件
# 升序
sort sg
# 倒叙
sort -r sg
# 去重
sort -u sg
# 以冒号分隔,按第3列数值升序
sort -n -t: -k3 ceshi           
# 排序结果保存
sort -nr -t: -k3 ceshi -o out.txt 

在这里插入图片描述
在这里插入图片描述

2.3 uniq-去重

只能去掉相邻的重复行

常用选项

  • -c:对重复的行进行计数
  • -d:只显示重复行
  • -u:只显示唯一行
# 去掉相邻重复行
uniq sg
# 全局去重       
sort sg | uniq
# 统计每行出现次数                
sort sg | uniq -c
# 只显示重复行         
sort sg | uniq -d
# 只显示不重复行             
sort sg | uniq -u             

# 查看登录用户
who | awk '{print $1}'| uniq
# 查看登陆过系统的用户
last | awk '{print $1}' | sort | uniq | grep -v "^$" | grep -v wtmp

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4 tr-替换/删除

常用选项

  • -d:删除字符
  • -s:压缩重复字符,只保留一个
# 小写转大写
tr 'a-z' 'A-Z' < sg
# 对应字母的替换
cat sg | tr 'apple' 'APPLE'
# 把a 替换 ''
cat sg | tr 'a' ' '
# 替换 a -> / 
tr 'a' '/' < sg
# 删除所有 a               
tr -d 'a' < sg
# 删除换行符             
tr -d '\n' < sg
# 连续 p 压缩成一个               
tr -s 'p' < sg

在这里插入图片描述
在这里插入图片描述

总结

正则表达式是一种用来描述字符串模式的规则。功能:检索、替换、过滤符合特定规则的字符串。

元字符

  • ^ 匹配输入字符串的开始位置。除非在方括号表达式中使用,表示不包含该字符集合。要匹配 ^ 字符本身,请使用 \^
  • $ 匹配输入字符串的结尾位置。如果设置了RegExp 对象的 Multiline 属性,则 $ 也匹配换行符 \n 或回车符 \r,要匹配 $ 字符本身,请使用 \$
  • . 匹配除“\r\n”之外的任何单个字符
  • \ 反斜杠,又叫转义字符,去除其后紧跟的元字符或通配符的特殊意义
  • * 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*
  • [ ] 字符集合。匹配所包含的任意一个字符。例如,[abc]可以匹配“plain”中的“a”
  • [^] 匹配未包含的一个任意字符。例如 [^abc] 可以匹配 plin 中任何一个字母
  • [n1-n2] 字符范围。匹配指定范围内的任意一个字符。例如 [a-z] 可以匹配 a 到 z 范围内的任意一个小写字母字符
  • {n} n 是一个非负整数,匹配确定的 n 次。例如 o{2} 不能匹配 Bob 中的 o 但是能匹配 food 中的 oo
  • {n,} n 是一个非负整数,至少匹配 n 次。例如 o{2,} 不能匹配 Bob 中的 o ,但能匹配 foooood 中的所有o
  • {n,m} m 和 n 均为非负整数,其中 n<=m,最少匹配 n 次且最多匹配m 次
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值