鸟哥的私房菜:正规表示法与 shell script 学习整理
一、正规表示法的理论与实践
1.1 grep 指令的应用范式
grep
作为基于正规表示法的基础文本搜索工具,通过 grep [选项] 模式 文件名
的语法结构实现文本匹配功能。在系统配置文件检索场景中,命令 grep -n student /etc/passwd
可精准定位包含 "student" 字符串的行,并输出行号信息。面对系统日志数据处理需求,如筛选 dmesg
命令输出的网卡 ens3
相关日志,可采用管道技术结合选项参数实现:dmesg | grep -n -i ens3
。此外,-A
与 -B
选项支持上下文信息输出,-v
选项则实现反向匹配,例如 df | grep -v tmpfs
可过滤掉临时文件系统信息,聚焦常规文件系统数据展示。
1.2 正规表示法的符号语义体系
正规表示法通过特定元字符构建强大的模式匹配规则:
- 定位符:
^
匹配行首,$
匹配行尾,如grep -n '^#' regular_express.txt
可检索注释行 - 通配符:
.
匹配任意单个字符,\
用于转义特殊字符 - 重复限定符:
*
匹配零个或多个前导字符,\{n,m\}
实现精确重复次数控制 - 字符集合:
[]
定义字符类,[a-z]
表示小写字母集,[^abc]
实现反向选择 - 预定义字符类:
[:alnum:]
匹配字母数字字符,[:digit:]
匹配数字字符
通过对 /etc/services
等系统文件的模式匹配实践,可系统掌握各符号的组合应用逻辑。
1.3 sed 流编辑器的高级应用
sed
(Stream Editor)工具支持基于正规表示法的文本替换与流处理:
- 字符串替换:采用
s/旧模式/新模式/[g]
语法,如ifconfig | sed 's/.*inet //;s/ .*//'
可提取 IP 地址 - 行操作:
sed -n '10,15p' /etc/passwd
实现指定行范围输出 - 文件修改:添加
-i
选项可直接修改文件内容,但需谨慎使用以避免数据丢失
通过对 /etc/passwd
文件的批量处理实践,可深入掌握 sed
工具的编辑功能。
二、shell script 编程实践
2.1 脚本编写规范与执行机制
shell script
的编写需遵循严格的语法规范,包括指令顺序控制、空白字符处理、注释规范(#
开头)及长行延续(\
符号)。脚本执行存在多种模式:
- 权限执行:通过
chmod +x myid.sh
赋予执行权限后,使用绝对路径或相对路径调用 - 环境变量执行:将脚本所在目录添加至
PATH
环境变量 - 解释器执行:使用
bash myid.sh
或sh myid.sh
直接调用
不同执行方式对脚本运行环境(如变量作用域、工作目录)存在显著影响,需通过实践深入理解。
2.2 脚本执行环境分析
shell script
的执行环境直接影响其运行结果:
- 子进程执行:直接执行脚本将创建新的 shell 子进程
- 当前环境执行:使用
source
或.
命令可在当前 shell 环境中执行脚本,实现环境变量与函数的有效继承
通过 gototmp.sh
等测试脚本,可直观观察不同执行方式对工作目录、变量作用域的影响机制。
2.3 交互式脚本与参数传递
- 交互式脚本:通过
read
命令实现用户输入交互,如mypi.sh
脚本可根据用户输入的计算精度执行圆周率计算 - 参数传递:使用
$1
、$2
等位置参数实现非交互式参数传递,mypi2.sh
脚本通过命令行参数控制计算精度
通过 listcmd.sh
与 listcmd2.sh
脚本实践,可掌握不同参数传递方式的应用场景。
2.4 if...then 条件判断结构
if...then
语句用于实现脚本逻辑控制:
1 | if [ 条件表达式 ]; then |
在 mypi.sh
脚本中引入输入合法性检查,可有效处理非法输入情况,提升脚本健壮性。
2.5 case
...esac
多路分支结构
当存在多条件判断场景时,case...esac
结构提供更简洁的实现方式:
1 | case $变量 in |
通过对 mypi3.sh
与 mypi4.sh
脚本的改造实践,可掌握复杂分支逻辑的实现方法。
三、延伸型正规表示法应用
延伸型正规表示法通过 egrep
工具实现更强大的模式匹配能力,新增符号包括:
+
:匹配一个或多个前导字符?
:匹配零个或一个前导字符|
:实现逻辑或运算()
:分组操作
典型应用如 egrep -v '^$|^#' /etc/crontab
可一次性去除空白行与注释行,显著提升文本处理效率。通过具体案例实践,可掌握延伸型正规表示法在复杂数据清洗场景中的应用技巧。