首页 > 系统相关 >Linux系统Shell脚本第五章:shell数组、正则表达式及文件三剑客之AWK

Linux系统Shell脚本第五章:shell数组、正则表达式及文件三剑客之AWK

时间:2023-02-05 23:11:41浏览次数:41  
标签:字符 Shell 匹配 打印 shell awk print root 三剑客

一、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. 分组

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

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

 

4. 选项

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

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

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

 

4. 处理模式

①基本格式: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                               #匹配出的内容

 

5. 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

 

6、if条件判断

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

 

标签:字符,Shell,匹配,打印,shell,awk,print,root,三剑客
From: https://www.cnblogs.com/daiwei-123/p/17094153.html

相关文章

  • shell脚本之条件语句
    shell脚本之条件语句一、条件测试操作1、测试命令------test可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为0表示条件成立,反之不成立)。使用test命令......
  • Linux系统Shell脚本第四章:shell函数
    一、shell函数1.函数的作用定义较为复杂的但是需要重复使用的内容,以便再次使用可以直接调用函数节约时间,提高效率2.函数使用步骤①首先是定义函数②其次是调用函数(......
  • shell规范写法与变量
    shell规范写法与变量一、shell脚本概述1、shell是什么?Shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作......
  • Linux脚本Shell脚本第三章:for 、while循环
    一、for循环1.基本格式for  变量名称(注意是名称不是变量$等)  [ in  名称范围 ](可以不写)do  执行内容   若满足循环则做什么动作done  ......
  • Linux系统Shell脚本第二章:条件语句
    一、条件语句1、测试①test命令测试②[  ]测试(注意前后需要有空格)③[[  ]]加强版[  ],测试支持通配符和正则表达式三种测试方法选项:-d:测试是否为目录(Directo......
  • shell函数和数组
    一、函数1、函数使用方法定义函数再引用函数查看系统限制所有函数:declare-F看函数定义详细内容:declare-f 函数名  删除函数:unset 函数名 2、注......
  • Linux系统Shell脚本第一章:Shell脚本基础 + 时间同步
    一、Shell脚本基础1.什么是shell脚本?及构成就是将命令按顺序一一列出,最后自动执行执行需要权限,也可以直接使用绝对路径脚本其实不复杂,通用脚本环境改变后依然......
  • shell脚本——文本处理工具
      文本处理工具--grep、sed、awkBashShell提供了功能强大的文件处理工具:sed(流编辑器streameditor)和awk,都可使用正则表达式进行模式匹配。而grep又有......
  • shell脚本——函数与数组
     Shell脚本之函数及数组一、函数函数的作用语句块定义成函数约等于别名,定义函数,再引用函数封装的可重复利用的具体特定功能的代码函数的基本格式法一......
  • shell脚本——变量与条件语句
     文章目录 Shell:一般我们是用图形界面和命令去控制计算机,真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),由于安全、复杂、繁琐......