Linux:shell脚本 正则表达式与AWK
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
一、正则表达式
由一类特殊字符及文本字符所编写的模式其中有些字符元字符不表示字符字面意义而表示控制或通配的功能类似于增强版的通配符功能但与通配符不同通配符功能是用来处理文件名而正则表达式是处理文本内容中字符。
正则表达式被很多程序和开发语言所广泛支持vim, less,grep,sed,awk, nginx,mysql 等
主要用来匹配字符串命令结果文本内容
通配符匹配文件而且是已存在的文件
-
基本正则表达式
-
扩展正则表达式
1.2元字符
. 匹配任意单个字符可以是一个汉字
[] 匹配指定范围内的任意单个字符示例[zhou] [0-9] [] [a-zA-Z] [:alpha:]
[^] 匹配指定范围外的任意单个字符,示例[^zhou] [^a.z] [a.z]
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符亦即 A-Z, a-z
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母
[:blank:] 空白字符空格和制表符
[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围
广
[:cntrl:] 不可打印的控制字符退格、删除、警铃...
[:digit:] 十进制数字
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
\w #匹配单词构成部分等价于[_[:alnum:]]
\W #匹配非单词构成部分等价于[^_[:alnum:]]
\S #匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\s #匹配任何空白字符包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意
Unicode 正则表达式会匹配全角空格符
元字符点.
#此处的点代表字符
#点值表示点需要转义
#r..t ..代表任意两个字符
1.3表示次数
* #匹配前面的字符任意次包括0次贪婪模式尽可能长的匹配
.* #任意长度的任意字符,不包括0次
\? #匹配其前面的字符出现0次或1次,即:可有可无
\+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
\{n\} #匹配前面的字符n次
\{m,n\} #匹配前面的字符至少m次至多n次
\{,n\} #匹配前面的字符至多n次,<=n
\{n,\} #匹配前面的字符至少n次
ifconfig ens33|grep netmask|grep -o
1.4位置锚定
^ #行首锚定, 用于模式的最左侧
$ #行尾锚定用于模式的最右侧
^PATTERN$ #用于模式匹配整行 单独一行 只有root
^$ #空行
^[[:space:]]*$ # 空白行
\< 或 \b #词首锚定用于单词模式的左侧(连续的数字字母下划线都算单词内部)
\> 或 \b #词尾锚定用于单词模式的右侧
\<PATTERN\> #匹配整个单词
1.5分组或其他
分组() 将多个字符捆绑在一起当作一个整体处理如(root)+
后向引用分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中这些变量的命名
方式为: \1, \2, \3, ...
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
1.6扩展正则表达式
* 匹配前面字符任意次
? 0或1次
+ 1次或多次
{n} 匹配n次
{m,n} 至少m至多n次
{,n} #匹配前面的字符至多n次,<=nn可以为0
{n,} #匹配前面的字符至少n次,<=nn可以为0
表示邮箱
表示手机号
1.7grep
grep [选项]… 查找条件 目标文件
-
-i查找时忽略大小写
-
-v反向查找输出与查找条件不相符的行
-
-o 只显示匹配项
-
-f 对比两个文件的相同行
-
-c 匹配的行数[root@localhost ky15]# grep -c root passwd 2
-color=auto 对匹配到的文本着色显示
-m # 匹配#次后停止-v 显示不被pattern匹配到的行,即取反
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数-o 仅显示匹配到的字符串
-q 静默模式不输出任何信息
-A # after, 后#行-B # before, 前#行
-C # context, 前后各#行-e 实现多个选项间的逻辑or关系,如grep –e ‘cat ' -e ‘dog' file
-w 匹配整个单词
二、AWK
在 Linux/UNIX 系统中awk 是一个功能强大的编辑工具逐行读取输入文本默认以空格或tab键作为分隔符作为分隔并按模式或者条件执行编辑命令。而awk比较倾向于将一行分成多个字段然后进行处理。AWK信息的读入也是逐行
指定的匹配模式进行查找对符合条件的内容进行格式化输出或者过滤处理可以在无交互 的情况下实现相当复杂的文本操作被广泛应用于 Shell 脚本完成各种自动化配置任务。
#打印root 多少行=passwd里的行数
#分区利用率
#用冒号分隔开
#取ip地址
awk -F
-F “分隔符” 指明输入时用到的字段分隔符默认的分隔符是若干个连续空白符
# $0代表全部元素
# $1,$3代表第一第三列
# 已root为开头的行
# 统计当前已/bin/bash结尾的行