📅  最后修改于: 2023-12-03 15:10:58.387000             🧑  作者: Mango
正则表达式是在Unix/linux平台下广泛使用的强大工具,用于对字符串进行匹配和替换。对于Shell脚本程序员来说,熟练掌握正则表达式是非常重要的。
正则表达式由各种特殊字符、普通字符和元字符组成。
特殊字符在正则表达式中具有特殊的含义,如下表所示:
| 特殊字符 | 含义 | | -------- | -------------------------------- | | $ | 匹配字符串结尾 | | ^ | 匹配字符串开头 | | . | 匹配除换行符以外的任意一个字符 | | + | 匹配前面的字符出现一次或多次 | | * | 匹配前面的字符出现零次或多次 | | ? | 匹配前面的字符出现零次或一次 | | [] | 匹配括号内的任意一个字符或范围 | | () | 将括号内的项作为一个整体进行匹配 |
普通字符指正则表达式中除特殊字符和元字符外的其他字符,如字母、数字和标点符号等。
元字符是一些用于逻辑操作的特殊字符,由多个普通字符组成,如下表所示:
| 元字符 | 含义 | | ------ | -------------------- | | {n,m} | 匹配前面字符n到m次 | | \ | 转义字符 | | | | 匹配前后字符中的一个 | | () | 分组 |
在Shell-Bash中,可以使用一些内置的命令和操作符来操作正则表达式。
grep命令用于在文件中查找指定的字符串或正则表达式,并输出符合条件的行。
# 查找包含test的所有行
grep "test" file.txt
# 查找不包含test的所有行
grep -v "test" file.txt
# 查找以test开头的所有行
grep "^test" file.txt
# 查找以test结尾的所有行
grep "test$" file.txt
# 查找以t开头,e结尾的所有行
grep "^t.*e$" file.txt
# 查找包含t或e的所有行
grep "t\|e" file.txt
# 查找数字的所有行
grep "[0-9]" file.txt
# 查找包含digit和number的所有行
grep -E "(digit|number)" file.txt
sed命令用于对文件的内容进行编辑和替换。其中,正则表达式作为sed命令中的操作数。
# 将所有包含test的字符串替换为new
sed 's/test/new/g' file.txt
# 在每行的开头插入数字
sed 's/^/[0-9] /g' file.txt
# 删除空行
sed '/^$/d' file.txt
awk命令用于对文件进行文本处理,支持正则表达式作为条件进行匹配。
# 输出文件中所有以test开头的行
awk '/^test/{print}' file.txt
# 输出以2开头,3结尾的所有行
awk '/^2.*3$/{print}' file.txt
# 输出第一列中包含test的行
awk '/test/{print $1}' file.txt
本文介绍了Shell-Bash中正则表达式的基础和应用,不同内置命令之间的用法略有不同,需要根据具体情况进行选择。熟练掌握正则表达式可以提高Shell-Bash脚本的编写效率。