欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

linux glob 与 正则的区别 AG chatgpt 有大用

linux glob 与 正则的区别  

在 Linux 中,glob 和 正则表达式 都用于模式匹配,但它们在语法和使用场景上有显著的区别。以下是它们的详细对比:


1. 用途

  • Glob

    • 主要用于文件名匹配(例如在 shell 中筛选文件)。

    • 例如:*.txt 匹配所有以 .txt 结尾的文件。

  • 正则表达式

    • 用于更复杂的文本匹配(例如在 grepsed 或 awk 中搜索字符串)。

    • 例如:^a.*z$ 匹配以 a 开头、以 z 结尾的字符串。


2. 语法

Glob

  • *:匹配任意数量的字符(包括空字符)。

    • 例如:*.txt 匹配所有 .txt 文件。

  • ?:匹配单个字符。

    • 例如:file?.txt 匹配 file1.txtfileA.txt 等。

  • []:匹配指定范围内的单个字符。

    • 例如:file[0-9].txt 匹配 file0.txt 到 file9.txt

  • {}:匹配多个模式。

    • 例如:file{.txt,.log} 匹配 file.txt 和 file.log

正则表达式

  • .:匹配任意单个字符。

    • 例如:a.c 匹配 abcacc 等。

  • *:匹配前一个字符 0 次或多次。

    • 例如:a* 匹配 aaaaaa 等。

  • +:匹配前一个字符 1 次或多次。

    • 例如:a+ 匹配 aaaaaa 等。

  • ?:匹配前一个字符 0 次或 1 次。

    • 例如:a? 匹配 a 或空。

  • []:匹配指定范围内的单个字符。

    • 例如:[0-9] 匹配任意一个数字。

  • ^:匹配行首。

    • 例如:^a 匹配以 a 开头的行。

  • $:匹配行尾。

    • 例如:a$ 匹配以 a 结尾的行。

  • ():分组匹配。

    • 例如:(abc)+ 匹配 abcabcabc 等。

  • |:或操作。

    • 例如:a|b 匹配 a 或 b


3. 转义字符

  • Glob

    • 几乎不需要转义字符,因为语法简单。

  • 正则表达式

    • 特殊字符(如 .*+? 等)需要用 \ 转义。

    • 例如:a\.b 匹配 a.b,而不是任意字符 b


4. 功能复杂

  • Glob

    • 功能简单,适合文件名匹配。

  • 正则表达式

    • 功能强大,支持复杂的文本匹配(如重复匹配、分组、逻辑操作等)。


5. 示例对比

需求Glob正则表达式
匹配所有 .txt 文件*.txt.*\.txt
匹配 file1 到 file9file[1-9]file[1-9]
匹配以 a 开头的字符串不支持^a
匹配包含 abc 的字符串不支持.*abc.*

总结

  • Glob 更适合文件名匹配,语法简单。

  • 正则表达式 适合更复杂的文本匹配,功能强大。

  • 两者语法不同,使用时需要根据场景选择合适的方式。



glob 到底是什么意思

GlobGlobal 的缩写)是一种用于匹配文件名或路径的模式匹配语法。它最初起源于 Unix 系统,现在广泛应用于命令行工具(如 bashzsh 等)和脚本中,用于快速筛选文件或目录。


Glob 的核心功能

Glob 的主要作用是通过简单的通配符(wildcards)来匹配一组文件名或路径。它通常用于以下场景:

  • 列出目录中的特定文件。

  • 删除、移动或复制多个文件。

  • 在脚本中动态选择一组文件。


Glob 的常用通配符

以下是 Glob 中常用的通配符及其含义:

  1. *

  • *.txt 匹配所有以 .txt 结尾的文件。

  • file* 匹配所有以 file 开头的文件。

  • 匹配任意数量的字符(包括空字符)。

  • 例如:

  • ?

    • file?.txt 匹配 file1.txtfileA.txt,但不匹配 file10.txt

    • 匹配单个任意字符。

    • 例如:

  • []

    • 匹配指定范围内的单个字符。

    • 例如:

      • file[0-9].txt 匹配 file0.txt 到 file9.txt

      • file[a-z].txt 匹配 filea.txt 到 filez.txt

    1. {}

    • 匹配多个模式。

    • 例如:

      • file{.txt,.log} 匹配 file.txt 和 file.log

    1. !(在某些 shell 中):

    • 排除指定模式。

    • 例如:

      • !*.txt 匹配除了 .txt 文件之外的所有文件。


    Glob 的示例

    以下是一些 Glob 的常见用法:

    • 匹配当前目录下所有文件:

      bash

      *
    • 匹配所有 .txt 文件:

      bash

      *.txt
    • 匹配 file1 到 file9

      bash

      file[1-9]
    • 匹配 file.txt 和 file.log

      bash

      file.{txt,log}

    Glob 和正则表达式的区别

    • Glob

      • 语法简单,主要用于文件名匹配。

      • 例如:*.txt 匹配所有 .txt 文件。

    • 正则表达式

      • 语法复杂,功能强大,主要用于文本匹配。

      • 例如:.*\.txt 匹配任意以 .txt 结尾的字符串。


    总结

    Glob 是一种简单而高效的文件名匹配工具,适合在命令行中快速筛选文件。它的语法直观,适合日常使用,但功能上不如正则表达式全面。


    wildcards 是什么英文

    Wildcards 是英语中的一个术语,直接翻译为 通配符。它来自 "wild"(野生的、不确定的)和 "card"(卡片,引申为符号或字符),合在一起表示 不确定的字符 或 占位符

    Wildcards 的含义和用法

    在计算机和编程领域,wildcards 是一种特殊字符,用于匹配任意值或不特定的字符。它们通常用于文件名匹配、搜索和文本模式匹配中,最常见的例子是:

    • *(星号):匹配任意数量的字符(包括零个字符)。

      • 例如:*.txt 匹配所有以 .txt 结尾的文件。

    • ?(问号):匹配单个任意字符。

      • 例如:file?.txt 匹配 file1.txtfileA.txt,但不匹配 file10.txt

    • [](方括号):匹配指定范围内的单个字符。

      • 例如:file[0-9].txt 匹配 file0.txt 到 file9.txt

    Wildcards 的常见场景

    1. 文件名匹配

    • 在命令行中,使用 ls *.log 列出所有 .log 文件。

  • 文本搜索

    • 在数据库查询中,使用 % 作为通配符(例如 SQL 中的 LIKE 'a%' 匹配以 a 开头的字符串)。

  • 正则表达式

    • 正则表达式中的 .* 等也被视为通配符。

    Wildcards 和 Glob 的关系

    • Glob 是 wildcards 的一种具体实现,专门用于文件名匹配。

    • 在 Linux 命令行中,wildcards 通常指的就是 Glob 语法中的通配符(如 * 和 ?)。

    总结

    Wildcards 是英文中表示 通配符 的专业术语,用于匹配不确定的字符或模式。它在计算机科学中广泛应用于文件名匹配、文本搜索和数据处理等领域。



    为什么叫 Glob

    Glob 这个名字来源于 Global(全局的、通用的)这个单词,它最初是用于 Unix 系统中的一个功能,用于在命令行中进行 文件名匹配。以下是关于 Glob 名字来源的详细解释:


    Glob 名字的来源

    1. Global 的缩写

    • "Glob" 是 Global 的缩写,表示这种模式匹配是“通用的”或“全局的”。

    • 它的设计初衷是为了提供一个简单的方式来匹配多个文件名或路径。

  • Unix 历史背景

    • 在早期的 Unix 系统中,glob 是一个独立的程序(/etc/glob),用于扩展命令行中的通配符(如 * 和 ?)。

    • 后来,这种功能被集成到 shell(如 bash)中,但名字保留了下来。

  • Glob 的发音

    • "Glob" 的发音与 "globe"(地球、球体)相似,暗示这种模式匹配可以覆盖“全局”范围。


    Glob 的核心思想

    Glob 的核心思想是通过 通配符(Wildcards) 来匹配文件名或路径,例如:

    • * 匹配任意数量的字符。

    • ? 匹配单个字符。

    • [] 匹配指定范围内的字符。

    这些通配符使得用户可以轻松地匹配多个文件,而不需要手动列出每个文件的名字。


    Glob 和正则表达式的区别

    • Glob

      • 语法简单,主要用于文件名匹配。

      • 例如:*.txt 匹配所有 .txt 文件。

    • 正则表达式

      • 语法复杂,功能强大,主要用于文本匹配。

      • 例如:.*\.txt 匹配任意以 .txt 结尾的字符串。


    总结

    Glob 的名字来源于 Global,体现了它的通用性和全局匹配的能力。它是一种简单而高效的模式匹配工具,专门用于文件名匹配。尽管它的功能不如正则表达式强大,但在日常文件操作中非常实用。






    普通分类: