百日筑基篇——正则表达式(linux入门五)
前言
正则表达式是一种强大且灵活的工具,在很多编程语言中都有内置的正则表达式支持。不同的编程语言对正则表达式的语法和用法可能有所不同,但基本的正则表达式语法和规则是通用的。今天就简单介绍一下在Linux脚本Bash语言中正则表达式的应用。
一、正则表达式简介
它是一种描述字符模式的工具,可以用来进行字符串的匹配和查找、替换等操作。使用正则表达式可以对字符串进行高级的模式匹配,并可以按照一定的规则进行查找、替换和数据提取等操作。
以下是一些常用的正则表达式语法:
1. 字符匹配:
使用方括号 [] 匹配指定范围内的任意一个字符,
例如,[a-z] 可以匹配 ‘a’ 到 ‘z’ 范围内的任意小写字母字符。
2. 边界匹配:
^ :匹配输入字符串的开始位置,
当在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。
要匹配 ^ 字符本身,使用 \ ^。
$:匹配输入字符串的结束位置,要匹配 $ 字符本身,请使用 \ $
3. 限定符:
* : 匹配前面的子表达式零次或多次。 + : 匹配前面的子表达式一次或多次。 ? : 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符 {n,m}: 匹配前面的字符或子表达式至少 n 次,但不超过 m 次
4. 常用的特殊字符:
’ \ ‘ : 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。
例如, ‘n’ 匹配字符 ‘n’。‘\n’ 匹配换行符。序列 ‘\’ 匹配 “”,而 ‘(’ 则匹配 “(”
‘\d’:匹配一个数字字符,相当于 [0-9]。
‘\D’:匹配一个非数字字符,相当于 [^0-9]。
‘\w’:匹配一个单词字符,包括字母、数字和下划线,相当于 [a-zA-Z0-9_]。
‘\W’:匹配一个非单词字符,相当于 [^a-zA-Z0-9_]。
‘\s’:匹配一个空白字符,包括空格、制表符、换行符等。
‘\S’:匹配一个非空白字符。
‘.’:匹配除换行符以外的任意字符。
5. 分组和引用:
使用圆括号 () 进行分组,可以将多个字符或子表达式组合为一个整体,并对整体应用量词。
使用 ‘\数字’ 来引用前面的分组。例如,
‘(abc)\1’ 可以匹配 “abcabc”。
(abc)(aa)\2 可用于匹配以 “abc” 开头、中间是 “aa”、且结尾也是 “aa” 的字符串
二、例子:
# 匹配以字母开头,数字结尾
^[A-Za-z][0-9]$
#匹配以非字母开头,数字结尾
^[^A-Za-z][0-9]$
#匹配除了双引号(")和单引号(')以及(^)之外的所有字符
^[^\"\'\^]
#匹配以 "w" 开头且长度为 1 到 3 个字符的字符串
^w{1,3}$
#有无$结尾的区别
^h{2,} #如:hhefd和hhhsd,但host不行
^h{2,}$ # hhhsd不行,要求字符"h"必须一直出现到字符串的结尾才算匹配
#匹配所有的正整数
^[1-9][0-9]{0,}$
#所有的整数
^\-{0,1}[0-9]{1,}$
#所有的浮点数
^[-]?[0-9]+\.?[0-9]+$
#"[-]?" 是用于匹配可选的减号,表示负数。减号"-"被放在方括号内表示可选,即可以出现零次或一次。
#"[0-9]+" 是用来匹配一个或多个数字字符,表示整数部分。
#".?" 是用来匹配可选的小数点。小数点"."被放在方括号内表示可选,即可以出现零次或一次。
#"[0-9]+" 是用来匹配一个或多个数字字符,表示小数部分
#+号表示匹配前面的表达式一次或多次
三、应用:
bash语言中的正则比对,使用[[]]
1. 判断用户是否w开头
[[ "$USER" =~ ^w ]];echo $?
“$USER” 是用来获取环境变量USER的值。
“=~” 是用来进行正则表达式匹配的操作符。
“^w” 是正则表达式,表示以字母"w"开头。
$? 是一个特殊变量,用于获取上一个命令的退出状态码,0为真,1为假
2. 测试输入是否全是数字
#!/usr/bin/bash
read -p "输入一个值:" num
if [[ "$num" =~ ^[0-9]+$ ]];then
echo "你输入的全为数字"
else
echo "错误,你输入的不全是数字"
fi
总结
正则表达式在许多编程语言中都广泛应用,基本的正则表达式语法和规则是通用的。本文主要介绍的是在Linux系统的脚本语言中的应用。介绍了许多常用的正则表达式的语法。
谈笑有鸿儒,往来无白丁
–2023-7-23 筑基篇