当前位置: 首页 > news >正文

Shell编程从入门到实践:基础语法与正则表达式文本处理指南

文章目录

  • Shell编程与正则表达式实战指南
    • 引言:Shell与正则表达式的强大组合
    • 一、Shell编程核心技能
      • 1. 函数:封装可复用的代码块
        • 基础函数示例
        • 参数处理技巧
      • 3. 函数的返回值
      • 2. 数组:存储多个数据的容器
        • 数组基本操作
        • 关联数组(Bash 4.0+)
    • 二、正则表达式深度解析
      • 1. 正则表达式基础
        • Linux正则分类
      • 2. 核心元字符
        • 基础元字符
        • 重复次数元字符
      • 3. grep工具实战
        • 常用选项
        • 实战案例
    • 三、综合实战项目
      • 1. 日志分析系统
      • 2. 文件批量处理工具
    • 四、进阶学习建议
    • 结语

Shell编程与正则表达式实战指南

引言:Shell与正则表达式的强大组合

在Linux/Unix系统中,Shell作为连接用户与内核的"桥梁",既是命令解释器,也是一门强大的脚本语言。配合正则表达式这一文本处理"利器",能够大幅提升系统管理、日志分析和批量任务处理的效率。本文将带你从基础到实战,全面掌握这两项核心技能。

一、Shell编程核心技能

1. 函数:封装可复用的代码块

Shell函数是代码复用的重要工具,具有以下特点:

  • 必须在调用前定义
  • 支持参数传递(通过位置参数$1, $2等)
  • 返回值只能是整数(通过$?获取)
基础函数示例

#!/bin/bash
sum(){
read -p "请输入第一数:" num1
read -p "请输入第二数:" num2
echo " 你输入的两个数:$num1$num2 "
SUM=$(($num1+$num2))
echo "两个数的和为:" $SUM
}
sum

在这里插入图片描述
在这里插入图片描述

参数处理技巧
show_params() {echo "第一个参数: $1"echo "第二个参数: $2"echo "第十个参数: ${10}"  # 注意大括号echo "参数总数: $#"echo "所有参数: $@"
}show_params 1 2 3 4 5 6 7 8 9 10 11

在这里插入图片描述
在这里插入图片描述

3. 函数的返回值

#!/bin/bash
getMax()
{
if [ $1 -lt $2 ]; thenreturn $2
elsereturn $1;
fi
}
echo "Shell程序中传递的两个参数是:$1 , $2"getMax $1 $2echo "最大值::$?"   # $?表示返回值

在这里插入图片描述
使用?并不妥,因为?并不妥,因为?并不妥,因为?的范围为0-255。当比较的数字大于255时无法得到正确的结果。

2. 数组:存储多个数据的容器

Shell数组特点:

  • 一维数组,无需声明大小
  • 索引从0开始
  • 支持稀疏数组(不连续索引)
数组基本操作

files=(*.txt)  # 将当前目录所有txt文件存入数组
echo "第一个文件: ${files[0]}"
echo "文件总数: ${#files[@]}"# 遍历数组
for file in "${files[@]}"; doecho "处理文件: $file"
done

在这里插入图片描述

在这里插入图片描述

关联数组(Bash 4.0+)
declare -A colors  # 声明关联数组
colors["red"]="#FF0000"
colors["green"]="#00FF00"
echo "红色代码: ${colors[red]}"

在这里插入图片描述
在这里插入图片描述

二、正则表达式深度解析

1. 正则表达式基础

正则表达式是一种描述"字符串模式"的规则,通过元字符组合实现对文本的检索、替换和过滤。

Linux正则分类
分类全称特点支持工具
BRE基础正则表达式功能有限,部分元字符需转义grep, sed
ERE扩展正则表达式功能更强,元字符无需转义egrep, awk

2. 核心元字符

基础元字符
元字符含义示例匹配结果
.任意单个字符a.cabc, a1c
[]字符集中的一个[aeiou]a, e
^行首^start行首的start
$行尾end$行尾的end
重复次数元字符
元字符含义示例匹配结果
*0次或多次ab*cac, abc, abbc
+1次或多次ab+cabc, abbc
?0次或1次ab?cac, abc
{n}恰好n次a{3}aaa

3. grep工具实战

常用选项
选项含义示例
-E启用扩展正则grep -E 'a+'
-i忽略大小写grep -i 'hello'
-o只输出匹配部分grep -o '[0-9]+'
-v反向匹配grep -v '^#'
实战案例
# 查找包含"error"或"warning"的行
grep -E 'error|warning' log.txt  #-E 可以识别正则表达式的元字符
|表示为或# 提取邮箱地址grep -E -o '\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b'  emails.txt

三、综合实战项目

1. 日志分析系统

#!/bin/bashanalyze_logs() {# 统计访问量TOP10 IPawk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10# 统计HTTP状态码awk '{print $9}' access.log | sort | uniq -c# 查找错误请求awk '$9 ~ /^[45]/ {print $0}' access.log
}analyze_logs

2. 文件批量处理工具

#!/bin/bashbatch_rename() {for file in *.$1; domv "$file" "${file%.*}.$2"done
}batch_replace() {find . -type f -exec sed -i "s/$1/$2/g" {} +
}# 使用示例
# batch_rename txt md
# batch_replace "old_text" "new_text"

四、进阶学习建议

  1. 深入学习文本处理三剑客

    • sed:流编辑器,擅长文本替换
    • awk:强大的文本分析工具
    • grep:文本搜索利器
  2. 正则表达式进阶

    • 零宽断言(lookaround)
    • 反向引用
    • 复杂模式匹配(如邮箱、URL等)
  3. Shell脚本优化

    • 错误处理机制
    • 性能优化技巧
    • 模块化设计

结语

Shell编程与正则表达式是Linux系统管理的核心技能组合。通过本文的学习,你已经掌握了从基础语法到实战应用的关键知识点。建议在日常工作中多实践、多思考,将这些技能真正转化为提升效率的"得力助手"。记住,持续实践是掌握这些技能的最佳途径!

http://www.xdnf.cn/news/1438039.html

相关文章:

  • 如何在部署模型前训练出完美的AI提示词
  • C# 中这几个主流的 ORM(对象关系映射器):Dapper、Entity Framework (EF) Core 和 EF 6
  • 11.《简单的路由重分布基础知识探秘》
  • 硬件:51单片机
  • 为什么需要锁——多线程的数据竞争是怎么引发错误的
  • 系统架构——过度设计
  • YOLOv8改进有效系列大全:从卷积到检测头的百种创新机制解析
  • 【C++上岸】C++常见面试题目--数据结构篇(第十七期)
  • 02-Media-2-ai_rtsp.py 人脸识别加网络画面RTSP推流演示
  • 51单片机(单片机基础,LED,数码管)
  • Spring Boot手写10万敏感词检查程序
  • UCIE Specification详解(十三)
  • C++ 条件变量,互斥锁
  • 【c++】多态+RTTI (运行时的类型识别信息)
  • 深度学习篇---DenseNet
  • 深入解析Linux进程概念与操作系统核心
  • 深度学习篇---SGD优化器
  • 「数据获取」《安徽建设统计年鉴》(2002-2007)(2004、2006缺失)(获取方式看绑定的资源)
  • spring boot驴友结伴游网站的设计与实现(代码+数据库+LW)
  • 使用Global Watersheds提取水文站控制区域(水文站上下游 流域水系等)
  • 【自记】Python 中 简化装饰器使用的便捷写法语法糖(Syntactic Sugar)示例
  • 复刻 Python 实现的小智语音客户端项目py-xiaozhi日记
  • 【算法笔记 day six】二分算法的第三部分
  • 手写Muduo网络库核心代码1-- noncopyable、Timestamp、InetAddress、Channel 最详细讲解
  • 测试覆盖率不够高?这些技巧让你的FastAPI测试无懈可击!
  • maven【maven】技术详解
  • ARM编译器生成的AXF文件解析
  • 平衡车-ADC采集电池电压
  • 综合诊断板CAN时间戳稳定性测试报告8.28
  • Linux内核进程管理子系统有什么第四十回 —— 进程主结构详解(36)