Linux系统Shell脚本之shell数组、正则表达式、及AWK

发布于:2025-05-09 ⋅ 阅读:(20) ⋅ 点赞:(0)

目录

一.shell数组

1.数组分类

2.定义数组的方法

二.正则表达式

1. 元字符

2.表示次数

3.位置锚定

4.分组

5.扩展正则表达式

三.文本三剑客之AWK

1.awk

2.使用格式

 3、处理动作

4.选项

 5.处理模式

6.awk常见的内置变量 

 7.if条件判断


一.shell数组

1.数组分类

①关联数组:必须声明才可以使用,命令:delare  -A   数组名  

②普通数组:利用数字下标节约变量,可以不声明也可以声明,命令:delare -a  数组名

delare  -a命令也可查看有哪些普通数组

2.定义数组的方法

①普通数组

②关联数组定义

二.正则表达式

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

1. 元字符

①.:在正则表达式中.表示任意单个字符。

③[^]:在正则表达式中表示匹配[ ]中外的任意单个字符。 

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

2.表示次数

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

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

③\?:表示匹配前面的字符1次或0次,即可有可无。 

④\+:表示匹配前面的字符最少1次。 

⑤\{n\}:表示匹配前面的字符n次。 

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

⑦\{m,\}:表示匹配前面的字符最少m次。

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

3.位置锚定

①^表示以什么字符开头的行。

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

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

④^$ 表示空行。

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

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

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

4.分组

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

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表示最后打印

4.选项

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

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

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

 5.处理模式

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

②处理模式为空表示无其他额外条件。

③正则表达式匹配模式

正则匹配:与正则表达式配合使用。

举例:
[root@pc1 data]#cat test.txt      #创建test.txt
root 1   abc  2    3     4      5      6  7 8
abcd
 
sadfasdf root
[root@pc1 data]#awk   '/^root/{print $2}' test.txt #使用awk配合正则表达式打印出test.txt文件中以root为开头的行的第二列,注意处理模式在固定格式'{}'的单引号中 
1                                 #匹配出的内容
[root@pc1 data]#awk   '/^root/,/root$/{print $2}' test.txt  #使用awk配合正则表达式打印出test.txt文件中以root为开头的且以root结尾的第二列,注意处理模式在固定格式'{}'的单引号中
1
 
 
root                               #匹配出的内容

6.awk常见的内置变量 

比较操作符:==, !=, >, >=, <, <=

逻辑操作符:&&与 并且的关系,||或 或者关系,!非 取反关系

①FS :指定每行文本的字段分隔符,缺省为空格或制表符(tab)。与 “-F”作用相同 -v "FS=:"

②OFS:输出时的分隔符

[root@pc1 data]#cat a.txt 
a:b:c
[root@pc1 data]#awk -v "FS=:"  -v OFS="==" '{print $1OFS$3}' a.txt  使用FS变量指定:为分隔符且指定输出分隔符OFS为==,打印a.txt文件的第1列和第3列
a==b

③NF:当前处理的行的字段个数即处理行有多少列,默认按空格分列,可指定。

④NR:当前处理的行的行号(序数)

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

⑥$n:当前处理行的第n个字段(第n列)

⑦FILENAME:被处理的文件名

⑧RS:行分隔符。awk从文件上读取资料时,将根据RS的定义就把资料切割成许多条记录,而awk一次仅读入一条记录进行处理。预设值是\n

 7.if条件判断

if语句:awk的if语句也分为单分支、双分支和多分支
单分支为if(){}
双分支为if(){}else{}
多分支为if(){}else if(){}else{}


网站公告

今日签到

点亮在社区的每一天
去签到