当前位置: 首页 > news >正文

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

目录

一.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{}

http://www.xdnf.cn/news/330751.html

相关文章:

  • Mongo3.4升级到mongo6性能降低9倍
  • HSV颜色空间
  • 51camera将参加第九届沥青路面论坛暨新技术新成果展示会
  • 代码随想录算法训练营第三十三天(补)
  • Unity Gizmos
  • 题解 洛谷 Luogu P1073 [NOIP 2009 提高组] 最优贸易 强连通分量 Tarjan 缩点 拓扑排序 动态规划 C++
  • Vue与Python的深度整合:构建现代Web应用的全栈范式
  • 国标GB28181设备管理软件EasyGBS打造明厨亮灶食品安全监管防线
  • 对称二叉树(简单)
  • sqlite数据库操作
  • Qt开发:枚举的介绍和使用
  • 【Win】插入u盘/固态硬盘Hub不显示在我的电脑
  • ModuleNotFoundError: No module named ‘numpy.typing‘
  • oracle 优化器
  • 【DB2】DB2启动失败报错SQL1042C
  • 深入解析进程间通信与Socket原理:从理论到TypeScript实战
  • 一文详解极大似然估计,从极大似然估计的角度理解线性回归
  • 101alpha_第4个
  • Linux系统之Shell脚本:for、while循环及脚本实操
  • 优艾智合CEO张朝辉荣膺U45杰出青年企业家
  • 强化学习环境安装——openAI gym
  • Chain-of-Draft (CoD) 是提示工程的新王者
  • openstack的网络
  • 数据结构--树
  • 第十六次博客打卡
  • mindie近期报错总结
  • WordPress_depicter Sql注入漏洞复现(CVE-2025-2011)
  • LeetCode 267:回文排列 II —— Swift 解法全解析
  • 第一章:MySQL 索引基础
  • ZYNQ笔记(十八):VDMA VGA彩条显示