第10章 Shell编程(1)_正则表达式

1. 基础的正则表达式

1.1 正则表达式与通配符

(1)正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式。

(2)通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。

1.2 基础正则表达式


元字符


作用


*


前一个字符匹配0次或任意多次(是前一个字符,这与bash的通配符不同)


.


匹配除了换行符外任意一个字符


^


匹配行首。例如:^hello会匹配以hello开头的行


$


匹配行尾。例如:hello$会匹配以hello结尾的行


[]


匹配中括号中指定的任意一个字符只匹配一个字符。例如:[aoeiu]匹配任意一个元音字母,[0-9]匹配任意一个数字,[a-z][0-9]匹配小写字母和一位数字构成的两位字符。


[^]


匹配除中括号中字符以外的任意一个字符。例如:[^0-9]匹配任意一位非数字字符,[^a-z]表示任意一位非小写字母。


\


转义符。用于将特殊殊号的含义取消。


\{n\}


表示前面的字符恰好出现n次。实际上为{n},其中{}要转义为原来的含义。


\{n,\}


表示其前面的字符出现不小于n次。例如:[0-9]\{2,\}表示两位及以上的数字


\{n,m\}


表示其前面的字符至少出现n次,最多出现m次。例如:[a-z]\{6,8\}匹配6到8位的小写字母。

【编程实验】正则表达式

//测试文本(test_rule.txt)

Mr. Santa Claus said:
he was the honest man in HorzionStudio
123 depise him.

But since Mr. Rolling Stone came,
he never saaaid those words.
55555nice!

because,actuaaaaly,
Mr. Rolling Stone is the most honest man!

Later, Mr. Santa Claus soid his hot body.

(1)“*”表示前一个字符匹配0次,或任意多次。

  ①#grep "a*" test_rule.txt  //匹配所有内容,包括空白行。(理解:*取0时,表示空白行或者可理解为在行中不出现a的行*≥1时表示a出现1次或多次的行。)

  ②#grep "aa*" test_rule.txt //至少包含有一个a的行。

  ③#grep "aaa*" test_rule.txt //至少包含两个连续a的字符串

  ④#grep "aaaa*" test_rule.txt //至少包含四个连续a的字符串。

(2)“.”匹配除了换行符外任意一个字符

  ①# grep "s..d" test_rule.txt //匹配在s和d之间一定有两个字符的字符串。

  ②# grep "s.*d" test_rule.txt //匹配在s和d字母之间有任意字符。

  ③# grep ".*" test_rule.txt   //匹配所有内容

(3)“^”匹配行首,“$”匹配行尾

  ①# grep "^M" test_rule.txt  //匹配以大写“M”开头的行

  ②# grep "n$" test_rule.txt  //匹配以小写n结尾的行

  ③# grep  -n "^$" test_rule.txt  //匹配空白行,-n表示输出的同时打印行号。

(4)“[]”匹配中括号中指定的任意一个字符,只匹配一个字符。

  ①# grep "s[ao]id" test_rule.txt //匹配s和i字母中,要不是a,要不是o

  ②# grep "[0-9]" test_rule.txt   //匹配任意一个数字

  ③# grep "^[a-z]" test_rule.txt  //匹配用小写字母开头的行。

  ④# grep "^[^0-9]" test_rule.txt //匹配以非数字开头的行

(5)“\”转义符

  ①# grep "\.$" test_rule.txt  //匹配以“.”结尾的行

(6)“\{n\}”表示其前面的字符恰好出现n次。

  ①# grep "a\{3\}" test_rule.txt  //匹配a字母连续出现3次的字符串,因正则是包括匹配,只要字符串中有3个连续的a则匹配。

  ②# grep "[0-9]\{3\}" test_rule.txt  //匹配包含连接3个数字的字符串

(7)“\{n,\}”表示其前面的字符出现不小于n次

  # grep "^[0-9]\{3,\}[a-z]" test_rule.txt  //匹配最少用连续3个数字开头的行。

(8)“\{n,m\}”匹配其前面的字符至少出现n次,最多出次m次。

  # grep "sa\{1,3\}i" test_rule.txt //匹配在字母s和i之间最少一个a最多3个a

时间: 2024-10-07 01:08:10

第10章 Shell编程(1)_正则表达式的相关文章

第10章 Shell编程(2)_字符截取命令

2. 字符截取命令 2.1 cut字段提取命令(grep提取行,cut提取列) (1)cut命令:#cut [选项] 文件名 选项: -f 列号:提取第几列: -d 分隔符:按照指定分隔符分割列,默认是制表符分隔. (2)应用举例 //测试文件(student.txt) ID Name gender PHP Linux MySQL Average 1 ZS M 82 95 86 87.66 2 LS F 74 96 87 85.66 3 WW M 99 83 93 91.66 ①#cut –f

10、shell编程+流程控制+分支嵌套

SHELL 编程 shell 是一个命令解释器,侦听用户指令.启动这些指令.将结果返回给用户(交互式的shell) shell 也是一种简单的程序设计语言.利用它可以编写一些系统脚本. 查看本机shell 信息: cat /etc/shells     --查看本支持的shell echo $SHELL --查看当前支持的shell shell 在执行命令时,各种命令的优先级: 别名 -> 关键字 -> 函数 -> 内置命令 -> 脚本 别名:命令的另一种形式,有些情况下可以简化命

第三章 shell编程之运算符

shell编程之运算符 一 shell变量的缺点 弱类型: 默认字符串型: 二 declare声明变量类型 格式:declare [+/-][选项] 变量名 -:给变量设定类型属性: +:取消变量的类型属性: -a:将变量声明为数组型:

第二章 Shell编程之变量

Shell编程之变量 一 Bash变量与变量分类 Bash是Linux中的标准Shell,因此经常称Bash为Shell. 1. 变量命名规则 变量名可以由字母.数字.下划线组成,但必须以字母与下划线开头: 变量名的长度不能超过255个字符: 变量名在有效范围必须唯一: 在Bash中,变量的默认类型都字符串型: 2. 变量按照存储类型分类 默认类型是字符串型. 字符串型,赋值时单双引号皆可: 整形: 浮点型: 日期型: 二 用户自定义变量 变量名与变量值都是用户自定义的,就是说可以由用户控制修改

《跟阿铭学Linux》第10章 shell基础知识:课后习题与答案

1. 设置环境变量 HISTSIZE , 使其能够保存10000条命令历史. vim /etc/profile   把 HISTSIZE=1000 改为 HISTSIZE=10000 2. 为什么如果这样设置PS1 (PS1="[\[email protected]\h \W]\$ ")  显示的结果和我们预想的不一样,那要如何设置才能恢复原来默认的? 应该是 PS1='[\[email protected]\h \W]\$ ' 3. 想办法把当前目录下的文件的文件名中的小写字母全部替

第二章 shell编程基础

2.1.1 shell脚本的参数 常用参数 (1) *  以一个字符串显示所向脚本传递的参数,与位置变量不同,此参数可超过9个 (2) @ 从参数1开始,显示所有向脚本传递的参数,和上边的*相似,下面会介绍区别 (3) # 参数数量,不包含参数0 (4) $ 脚本运行的当前ID号 (5) ! 后台运行的最后一个ID号 (6) ? 显示最后命令的退出状态,0表示没有错误,其他任何值表明有错误 (7) - 显示shell使用的当前选项,与set命令功能相同 注:① * 和 @ 的区别在于,当加上双引

Linux命令应用大词典-第10章 Shell相关命令

10.1 commond:抑制正常的Shell函数查找 10.2 exec:使用执行命令替换当前的shell进程 10.3 bash:GNU的Bourne-Again Shell解释器 10.4 builtin:执行Shell内建命令 10.5 enable:启用或禁用内建Shell命令 10.6 source:在当前shell环境中从指定文件读取和执行命令 10.7 mksh:用于交互式和Shell脚本的命令解释器 10.8 suspend:暂停Shell执行 10.9 sushell:执行单

第1章 shell编程概述

1.shell简介 shell是一种具备特殊功能的程序,它提供了用户与内核交互操作的一种接口.它用于接收用户输入的命令,并把它送入到内核去执行. shell是一种应用程序,当用户登录Linux系统时,shell就会被调入内存执行.shell独立于内核,它是连接内核与应用程序的桥梁,并由输入设备读取命令,再将其转为计算机可以理解的机器码,linux内核才能执行该命令. 2.一个简单的shell脚本 whologged.sh #!/bin/bash date who 脚本说明: 第1行是“#!/bi

Linux命令应用大词典-第11章 Shell编程

11.1 declare:显示或设置Shell变量 11.2 export:显示或设置环境变量 11.3 set:显示和设置Shell变量 11.4 unset:删除变量或函数 11.5 env:查看和设置环境变量 11.6 red:从标准输入中读取一行 11.7 readonly:设置只读变量 11.8 test:检查文件类型,并比较值 11.9 false:什么都不做,表示失败 11.1 declare:显示或设置Shell变量 11.2 export:显示或设置环境变量 11.3 set: