首页 > 系统相关 >shell正则表达式和awk

shell正则表达式和awk

时间:2023-02-19 14:22:18浏览次数:33  
标签:shell 匹配 正则表达式 pc1 echo ab awk grep root

一、正则表达式


注意事项:使用正则表达式必须加引号。

正则表达式主要用来匹配字符串(命令结果,文本内容)

 

通配符匹配文件(而且是已存在的文件)

  • 基本正则表达式

  • 扩展正则表达式

1、元字符

.   匹配任意单个字符,可以是一个汉字
[]   匹配指定范围内的任意单个字符,示例:[zhou]   [0-9]   []   [a-zA-Z] [:alpha:]
[^] 匹配指定范围外的任意单个字符,示例:[^zhou] [^a.z] [a.z]

[root@pc1 data]#grep -o r.t /etc/passwd #过滤passwd文件中开头为r中间任意单个字符结尾为t的内容
rat
rat
rat
[root@pc1 data]#grep -o r..t /etc/passwd #过滤passwd文件中开头为r中间任意2个字符结尾为t的内容
root
root
root
root
r/ft
[root@pc1 data]#grep -o r...t /etc/passwd #过滤passwd文件中开头为r中间任意3个字符结尾为t的内容
rtkit

 

 

 

 

 

 

[:alnum:]  字母和数字
[:alpha:]  代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:]  小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:]  大写字母
[:blank:]  空白字符(空格和制表符)
[:space:]  包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广
[:cntrl:]  不可打印的控制字符(退格、删除、警铃...)
[:digit:]  十进制数字
[:xdigit:] 十六进制数字
[:graph:]  可打印的非空白字符
[:print:] 
可打印字符











 

 

 

 

 

 

[root@pc1 data]#echo AB12ab | grep -o '[[:alpha:]]' #过滤输出内容的字母
A
B
a
b
[root@pc1 data]#echo AB12ab | grep -o '[[:alnum:]]' #过滤输出内容的字母和数字
A
B
1
2
a
b
[root@pc1 data]#echo AB12ab | grep -o '[[:lower:]]' #过滤输出内容的小写字母
a
b
[root@pc1 data]#echo AB12ab | grep -o '[[:upper:]]' #过滤输出内容的大写字母
A
B

  


2、表示次数

①*:表示匹配前面字符任意次,包括0次。

[root@pc1 ~]#echo ac |grep 'ab*c' #ab之间不输入b可匹配
ac
[root@pc1 ~]#echo abc |grep 'ab*c' #ab之间输入1个b可匹配
abc
[root@pc1 ~]#echo abbc |grep 'ab*c'#ab之间输入2个b可匹配
abbc
②.*:表示匹配前面字符任意次,不包括0次。

[root@pc1 ~]#echo ac |grep 'ab.*c' #ac之间不输入b匹配不到
[root@pc1 ~]#echo abc |grep 'ab.*c' #ac之间输入1个b可以匹配
abc
[root@pc1 ~]#echo abbc |grep 'ab.*c' #ac直接输入2个b可以匹配
abbc
③\?:表示匹配前面的字符1次或0次,即可有可无。

[root@pc1 ~]#echo ac | grep 'ab\?c' #ac之间不输入b可以匹配
ac
[root@pc1 ~]#echo abc | grep 'ab\?c' #ac之间输入1个b可以匹配
abc
[root@pc1 ~]#echo abbc | grep 'ab\?c' #ac之间输入2个b匹配不到
④\+:表示匹配前面的字符最少1次。

[root@pc1 ~]#echo ac | grep 'ab\+c' #ac之间不输入b匹配不到
[root@pc1 ~]#echo abc | grep 'ab\+c' #ac之间输入1个b可以匹配
abc
[root@pc1 ~]#echo abbbbc | grep 'ab\+c' #ac之间输入多个b可以匹配
abbbbc
⑤\{n\}:表示匹配前面的字符n次。

[root@pc1 ~]#echo abbbc |grep 'ab\{3\}c' #输出abbbc匹配ac之间b字符出现3次可以匹配
abbbc
[root@pc1 ~]#echo abbbbc |grep 'ab\{3\}c' #输出abbbbc匹配ac之间b字符出现3次匹配不到
⑥\{m,n\}:表示匹配前面的字符最少m次最多n次。

[root@pc1 ~]#echo abc |grep 'ab\{1,3\}c' #输出abc匹配ac之间b出现最少1次最多3次可以匹配
abc
[root@pc1 ~]#echo abbc |grep 'ab\{1,3\}c' #输出abbc匹配ac之间b出现最少1次最多3次可以匹配
abbc
[root@pc1 ~]#echo abbbc |grep 'ab\{1,3\}c'#输出abbbc匹配ac之间b出现最少1次最多3次可以匹配
abbbc
[root@pc1 ~]#echo abbbbc |grep 'ab\{1,3\}c'#输出abbbbc匹配ac之间b出现最少1次最多3次匹配不到
⑦\{m,\}:表示匹配前面的字符最少m次。

⑧\{,n\}:表示匹配前面的字符最多n次。

  

3、位置锚定
①^表示以什么字符开头的行。

②$表示以什么字符为结尾的行。

③^PATTERN$ 表示用于模式匹配整行 (单独一行 只有PATTERN字符)。

④^$ 表示空行。

⑤\< 或 \b #词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)。

⑥\> 或 \b #词尾锚定,用于单词模式的右侧。

⑦\<PATTERN\> #匹配整个单词。

 

4、分组
()将多个字符捆绑在一起当做一个整体处理

[root@pc1 ~]#echo abcccc |grep "abc\{4\}" #匹配输出内容c出现4次
abcccc
[root@pc1 ~]#echo abcccc |grep "\(abc\)\{4\}" #abc字符加()分组匹配输出内容abc出现4次,无abc出现4次匹配不到
[root@pc1 ~]#echo abcabcabcabc |grep "\(abc\)\{4\}" #abc字符加()分组匹配输出内容abc出现4次匹配成功
abcabcabcabc

5、扩展正则表达式
①使用方法

grep -E选项加正则表达式内容,与正常正则表达式区别在于不用在匹配时添加 \

②表示次数

* 匹配前面字符任意次
? 0或1次
+ 1次或多次
{n} 匹配n次
{m,n} 至少m,至多n次
{,n} #匹配前面的字符至多n次,<=n,n可以为0
{n,} #匹配前面的字符至少n次,<=n,n可以为0

③表示分组

() 分组

三、文本三剑客之AWK
1、awk
awk为流编辑器,即读取文件一行处理一行。不同于vi编辑器等是将文件整个缓存在内容中处理。

2、使用格式
awk [选项] '处理模式{处理动作}'

'{ }'为固定格式

 

3、处理动作
①基本格式:awk [选项] '处理模式{处理动作}'

②print动作:打印,打印'{print $1}'即为打印第一列,'{print $n}'即打印为第n列,'{print $n,$m}'即为打印第n列和第m列。

③print打印顺序:'BEGIN{print "1"} END {print "2"} {print "3"} ',首先打印BEGIN后的print 1,然后打印print 3 最后打印END后的print 2,BEGIN表示第一个打印,END表示最后打印

举例1:
[root@pc1 data]#cat test.txt #创建文件
1 2 3 4 5 6 7 8 @test.txt 文件内容
[root@pc1 data]#awk '{print $1}' test.txt #使用awk处理文件test.txt打印第1列
1
[root@pc1 data]#awk '{print $5}' test.txt #使用awk处理文件test.txt打印第5列
5
[root@pc1 data]#awk '{print $1,$5}' test.txt #使用awk处理文件test.txt打印第1列和第5列
1 5

  

 

 


举例2:
[root@pc1 data]# awk 'BEGIN{print "1"} END{print "$2"} {print "3"}' test.txt
1
3
2

  

 

 

 

4、选项
①基本格式:awk [选项] '处理模式{处理动作}'

②选项若不写默认为以空格为分隔符处理,且会将空格自动压缩。

③-F 选项 指定分隔符,即指定以什么为分隔符处理内容

举例:
[root@pc1 data]#cat test.txt #编辑test.txt内容
one two three
root:lisi:zhangsan
[root@pc1 data]#awk '{print $2}' test.txt #默认过滤test内容以空格为分隔符打印出第2列为two
two
[root@pc1 data]#awk -F : '{print $2}' test.txt #使用-F选项指定以:为分隔符打印出第2列为lisi

lisi

 

 




 

标签:shell,匹配,正则表达式,pc1,echo,ab,awk,grep,root
From: https://www.cnblogs.com/trist-commot/p/17092462.html

相关文章

  • xshell链接virtualbox 虚拟机 CentOs7
    安装虚拟机​​点击下载​​安装xshell​​点击下载​​(填写邮箱,邮箱里下载)下载CentOs​​点击下载CentOs7​​创建虚拟机,安装刚刚下载的镜像如图设置:xshell设置:如果失败,......
  • github 私有仓库linux下免输入账号密码 ||php shell_exec webhook自动化部署||如何使w
    github私有仓库linux下免输入账号密码cd~/touch.git-credentialsvim.git-credentials内容为:https://{username}:{password}@github.com比如https://account:password......
  • Xshell链接远程服务器报错
     报错内容: 1、首先:在Linux服务器上输入ps-e|grepssh 判断是否有ssh服务  以上只有客户端。2、进行ssh配置,  3、如果出现报错,无法配置,在Linux服务器......
  • 正则表达式
    正则表达式:匹配字符串能做什么:1.检测输入的字符串是否合法用户输入一个内容时,我们要提前做检测能够提高程序的效率且减轻服务器压力2.从一个大文......
  • 基于firewalld的防爆shell脚本
    统计ssh非法暴破源ip在维护linux服务器中,当开启sshd服务时,总会有一些不怀好意的访问者要来试探一下弱口令,假若访问失败的日志文件为/var/log/secure,总是手动来翻日志,也是麻......
  • Shell命令-常用操作
    Shell基础1Shell命令的基本格式基本格式command[选项][参数][]表示可选的,也就是可有可无。有些命令不写选项和参数也能执行,有些命令在必要的时候可以附带选项和参......
  • Hadoop-HDFS-shell命令
      第2章HDFS的Shell操作(开发重点)2.1基本语法hadoopfs具体命令 OR hdfsdfs具体命令两个是完全相同的。2.2命令大全[[email protected]]$......
  • PowerShell 脚本自动执行 Azure 任务
    PowerShell脚本自动执行Azure任务Azure提供了三种管理工具:Azure门户:Azure门户是一个网站,可在其中创建、配置和更改Azure订阅中的资源,该门户是一个图形用户界面......
  • linux 中 正则表达式 匹配任意标点符号[[:punct:]]
     001、root@ubuntu01:/home/test#lsa.txtroot@ubuntu01:/home/test#cata.txt##测试数据2,73.23723!8\3434+3444root@ubuntu01:/home/tes......
  • 正则表达式环视匹配(?=pattern)、(?!pattern)、(?<=pattern)、(?<!pattern)怎么用
    今天在处理数据的时候遇到一个,需要用正则表达式匹配不包含某字符的字符串的问题,用到否定匹配,现总结如下:一个正则小知识↓[]:表示范围,匹配其中任何一个{}:表示重复匹......