开发者

bash常用通配符的使用

开发者 https://www.devze.com 2025-08-16 10:19 出处:网络 作者: 咖啡の猫
目录一、前言二、什么是通配符?三、Bash 中常用的通配符一览四、通配符详解与使用示例✅ 1.*—— 匹配任意数量的字符✅ 2.?—— 匹配单个任意字符✅ 3.[]—— 匹配括号内的任意一个字
目录
  • 一、前言
  • 二、什么是通配符?
  • 三、Bash 中常用的通配符一览
  • 四、通配符详解与使用示例
    • ✅ 1.*—— 匹配任意数量的字符
    • ✅ 2.?—— 匹配单个任意字符
    • ✅ 3.[]—— 匹配括号内的任意一个字符
    • ✅ 4.[!]或[^]—— 匹js配不在括号中的字符
    • ✅ 5.{}—— 匹配多个指定字符串
    • ✅ 6.**(递归通配符) —— 匹配多级目录(需启用)
  • 五、通配符在 Shell 脚本中的应用
    • ✅ 示例1:批量重命名文件
    • ✅ 示例2:批量删除临时文件
    • ✅ 示例3:递归处理日志文件(需启用globstar)
    • ✅ 示例4:根据字符范围筛选文件
  • 六、通配符 vs 正则表达式
    • 七、实战案例:日志文件批量处理
      • 需求背景:
      • ✅ 实现脚本:
    • 八、常见问题与解决方案
      • 九、总结对比表:Bash 常用通配符一览
        • 十、结语

          一、前言

          在 linux Shell 编程和日常javascript使用中,通配符(Wildcards) 是 Bash 提供的一种强大机制,用于匹配文件名、路径、参数等,极大提升了命令行操作的效率。

          本文将带你全面了解 Bash 中常用的通配符,包括:

          ✅ 通配符的基本概念

          ✅ 常用通配符(如 *, ?, [], {})的使用方法

          ✅ 通配符在命令行与脚本中的应用

          ✅ 通配符与正则表达式的区别

          ✅ 实战案例:批量操作文件、日志处理、自动化脚本

          ✅ 常见问题与解决方案

          并通过完整示例帮助你快速掌握 Bash 通配符的使用与技巧。

          二、什么是通配符?

          通配符(Wildcard) 是 Bash 中用于模式匹配的特殊字符,主要用于匹配文件名或路径名。它android们通常用于 lscprmmvfind 等命令中,帮助用户快速操作多个文件。

          三、Bash 中常用的通配符一览

          通配符含义示例
          *匹配任意数量的任意字符*.txt → 匹配所有 .txt 文件
          ?匹配任意一个字符file?.txt → 匹配 file1.txt, fileA.txt
          []匹配括号中的任意一个字符[abc] → 匹配 a、b 或 c
          [!] 或 [^]匹配不在括号中的字符[!a-z] → 匹配非小写字母
          {}匹配多个指定的字符串file{1,2,3}.txt → 匹配 file1.txt, file2.txt, file3.txt
          **(扩展)递归匹配目录(需启用 shopt -s globstar)**/*.txt → 匹配所有子目录下的 .txt 文件DMHobOx

          四、通配符详解与使用示例

          ✅ 1.*—— 匹配任意数量的字符

          $ ls *.txt

          匹配所有以 .txt 结尾的文件,如:

          file1.txt  file2.txt  notes.txt

          ✅ 2.?—— 匹配单个任意字符

          $ ls file?.txt

          匹配:

          file1.txt  fileA.txt  fileZ.txt

          但不匹配 file10.txtfile.txt

          ✅ 3.[]—— 匹配括号内的任意一个字符

          $ ls [abc].txt

          匹配:

          a.txt  b.txt  c.txt

          也可以使用范围:

          $ ls [a-z].txt

          匹配所有小写字母命名的 .txt 文件。

          $ ls [0-9].txt

          匹配数字命名的 .txt 文件。

          ✅ 4.[!]或[^]—— 匹配不在括号中的字符

          $ ls [!a].txt

          匹配除 a.txt 以外的所有单字符命名的 .txt 文件。

          $ ls [^0-9].txt

          匹配非数字命名的 .txt 文件。

          ✅ 5.{}—— 匹配多个指定字符串

          $ ls file{1,2,3}.txt

          匹配:

          file1.txt  file2.txt  file3.txt

          也可以用于路径:

          $ cp config/{dev,prod}.conf /etc/app/

          复制 config/dev.confconfig/prod.conf 到目标目录。

          ✅ 6.**(递归通配符) —— 匹配多级目录(需启用)

          shopt -s globstar
          $ ls **/*.log

          匹配当前目录及其子目录下的所有 .log 文件。

          五、通配符在 Shell 脚本中的应用

          ✅ 示例1:批量重命名文件

          #!/bin/bash
          
          for file in *.txt; do
              mv "$file" "backup_$file"
          done

          将当前目录下所有 .txt 文件重命名为 backup_*.txt

          ✅ 示例2:批量删除临时文件

          rm *.tmp *.bak

          删除所有 .tmp.bak 文件。

          ✅ 示例3:递归处理日志文件(需启用globstar)

          shopt -s globstar
          for log in **/*.log; do
              echo "Processing $log"
              cat "$log" | grep "ERROR" >> errors.log
          done

          遍历所有子目录中的 .log 文件,提取包含 ERROR 的行,并追加到 errors.log

          ✅ 示例4:根据字符范围筛选文件

          ls [A-Z]*.sh

          列出所有以大写字母开头的 Shell 脚本。

          六、通配符 vs 正则表达式

          特性通配符(Glob)正则表达式(Regex)
          使用场景文件名匹配www.devze.com、路径匹配文本内容匹配、字符串处理
          支持命令ls, cp, rm, find, bashgrep, sed, awk, perl, python
          表达方式简洁直观更复杂、功能强大
          是否支持捕获❌ 不支持✅ 支持
          是否支持分组❌ 不支持✅ 支持

          注意: 通配符主要用于文件名和路径匹配,正则表达式用于文本内容匹配。

          七、实战案例:日志文件批量处理

          需求背景:

          你有一个日志目录,结构如下:

          /logs/
          ├── app1/
          │   ├── 2025-07-01.log
          │   └── 2025-07-02.log
          ├── app2/
          │   ├── 2025-07-01.log
          │   └── 2025-07-02.log

          你想提取所有日志中包含 ERROR 的行,并汇总到一个文件中。

          ✅ 实现脚本:

          #!/bin/bash
          
          shopt -s globstar
          
          for log in /logs/**/*.log; do
              grep "ERROR" "$log" >> /tmp/errors.log
          done
          
          echo "已提取所有 ERROR 日志到 /tmp/errors.log"

          八、常见问题与解决方案

          问题原因解决方案
          No such file or directory没有匹配的文件使用 nullglob 选项避免报错
          通配符未展开通配符被引号包裹去掉引号或使用 eval
          ** 未启用未启用 globstar执行 shopt -s globstar
          通配符匹配过多文件通配符太宽泛使用更精确的匹配模式
          中文文件名匹配失败编码问题确保终端使用 UTF-8 编码

          九、总结对比表:Bash 常用通配符一览

          通配符含义示例
          *匹配任意数量字符*.txt
          ?匹配单个字符file?.txt
          []匹配括号内任意一个字符[a-z].txt
          [!]匹配不在括号中的字符[!a].txt
          {}匹配多个指定字符串file{1,2}.txt
          **递归匹配目录**/*.log(需启用)

          十、结语

          到此这篇关于bash常用通配符的使用的文章就介绍到这了,更多相关bash 通配符内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

          0

          上一篇:

          没有了:下一篇

          精彩评论

          暂无评论...
          验证码 换一张
          取 消

          关注公众号