欢迎各位兄弟 发布技术文章
这里的技术是共享的
linux glob 与 正则的区别
在 Linux 中,glob 和 正则表达式 都用于模式匹配,但它们在语法和使用场景上有显著的区别。以下是它们的详细对比:
Glob:
主要用于文件名匹配(例如在 shell 中筛选文件)。
例如:*.txt
匹配所有以 .txt
结尾的文件。
正则表达式:
用于更复杂的文本匹配(例如在 grep
、sed
或 awk
中搜索字符串)。
例如:^a.*z$
匹配以 a
开头、以 z
结尾的字符串。
*
:匹配任意数量的字符(包括空字符)。
例如:*.txt
匹配所有 .txt
文件。
?
:匹配单个字符。
例如:file?.txt
匹配 file1.txt
、fileA.txt
等。
[]
:匹配指定范围内的单个字符。
例如:file[0-9].txt
匹配 file0.txt
到 file9.txt
。
{}
:匹配多个模式。
例如:file{.txt,.log}
匹配 file.txt
和 file.log
。
.
:匹配任意单个字符。
例如:a.c
匹配 abc
、acc
等。
*
:匹配前一个字符 0 次或多次。
例如:a*
匹配 a
、aa
、aaa
等。
+
:匹配前一个字符 1 次或多次。
例如:a+
匹配 a
、aa
、aaa
等。
?
:匹配前一个字符 0 次或 1 次。
例如:a?
匹配 a
或空。
[]
:匹配指定范围内的单个字符。
例如:[0-9]
匹配任意一个数字。
^
:匹配行首。
例如:^a
匹配以 a
开头的行。
$
:匹配行尾。
例如:a$
匹配以 a
结尾的行。
()
:分组匹配。
例如:(abc)+
匹配 abc
、abcabc
等。
|
:或操作。
例如:a|b
匹配 a
或 b
。
Glob:
几乎不需要转义字符,因为语法简单。
正则表达式:
特殊字符(如 .
、*
、+
、?
等)需要用 \
转义。
例如:a\.b
匹配 a.b
,而不是任意字符 b
。
Glob:
功能简单,适合文件名匹配。
正则表达式:
功能强大,支持复杂的文本匹配(如重复匹配、分组、逻辑操作等)。
需求 | Glob | 正则表达式 |
---|---|---|
匹配所有 .txt 文件 | *.txt | .*\.txt |
匹配 file1 到 file9 | file[1-9] | file[1-9] |
匹配以 a 开头的字符串 | 不支持 | ^a |
匹配包含 abc 的字符串 | 不支持 | .*abc.* |
Glob 更适合文件名匹配,语法简单。
正则表达式 适合更复杂的文本匹配,功能强大。
两者语法不同,使用时需要根据场景选择合适的方式。
glob 到底是什么意思
Glob(Global 的缩写)是一种用于匹配文件名或路径的模式匹配语法。它最初起源于 Unix 系统,现在广泛应用于命令行工具(如 bash
、zsh
等)和脚本中,用于快速筛选文件或目录。
Glob 的主要作用是通过简单的通配符(wildcards)来匹配一组文件名或路径。它通常用于以下场景:
列出目录中的特定文件。
删除、移动或复制多个文件。
在脚本中动态选择一组文件。
以下是 Glob 中常用的通配符及其含义:
*
:
*.txt
匹配所有以 .txt
结尾的文件。
file*
匹配所有以 file
开头的文件。
匹配任意数量的字符(包括空字符)。
例如:
?
:
file?.txt
匹配 file1.txt
、fileA.txt
,但不匹配 file10.txt
。
匹配单个任意字符。
例如:
[]
:
匹配指定范围内的单个字符。
例如:
file[0-9].txt
匹配 file0.txt
到 file9.txt
。
file[a-z].txt
匹配 filea.txt
到 filez.txt
。
{}
:
匹配多个模式。
例如:
file{.txt,.log}
匹配 file.txt
和 file.log
。
!
(在某些 shell 中):
排除指定模式。
例如:
!*.txt
匹配除了 .txt
文件之外的所有文件。
以下是一些 Glob 的常见用法:
匹配当前目录下所有文件:
bash
*
匹配所有 .txt
文件:
bash
*.txt
匹配 file1
到 file9
:
bash
file[1-9]
匹配 file.txt
和 file.log
:
bash
file.{txt,log}
Glob:
语法简单,主要用于文件名匹配。
例如:*.txt
匹配所有 .txt
文件。
正则表达式:
语法复杂,功能强大,主要用于文本匹配。
例如:.*\.txt
匹配任意以 .txt
结尾的字符串。
Glob 是一种简单而高效的文件名匹配工具,适合在命令行中快速筛选文件。它的语法直观,适合日常使用,但功能上不如正则表达式全面。
wildcards 是什么英文
Wildcards 是英语中的一个术语,直接翻译为 通配符。它来自 "wild"(野生的、不确定的)和 "card"(卡片,引申为符号或字符),合在一起表示 不确定的字符 或 占位符。
在计算机和编程领域,wildcards 是一种特殊字符,用于匹配任意值或不特定的字符。它们通常用于文件名匹配、搜索和文本模式匹配中,最常见的例子是:
*
(星号):匹配任意数量的字符(包括零个字符)。
例如:*.txt
匹配所有以 .txt
结尾的文件。
?
(问号):匹配单个任意字符。
例如:file?.txt
匹配 file1.txt
、fileA.txt
,但不匹配 file10.txt
。
[]
(方括号):匹配指定范围内的单个字符。
例如:file[0-9].txt
匹配 file0.txt
到 file9.txt
。
文件名匹配:
在命令行中,使用 ls *.log
列出所有 .log
文件。
文本搜索:
在数据库查询中,使用 %
作为通配符(例如 SQL 中的 LIKE 'a%'
匹配以 a
开头的字符串)。
正则表达式:
正则表达式中的 .
、*
等也被视为通配符。
Glob 是 wildcards 的一种具体实现,专门用于文件名匹配。
在 Linux 命令行中,wildcards
通常指的就是 Glob 语法中的通配符(如 *
和 ?
)。
Wildcards 是英文中表示 通配符 的专业术语,用于匹配不确定的字符或模式。它在计算机科学中广泛应用于文件名匹配、文本搜索和数据处理等领域。
为什么叫 Glob
Glob 这个名字来源于 Global(全局的、通用的)这个单词,它最初是用于 Unix 系统中的一个功能,用于在命令行中进行 文件名匹配。以下是关于 Glob 名字来源的详细解释:
Global 的缩写:
"Glob" 是 Global 的缩写,表示这种模式匹配是“通用的”或“全局的”。
它的设计初衷是为了提供一个简单的方式来匹配多个文件名或路径。
Unix 历史背景:
在早期的 Unix 系统中,glob
是一个独立的程序(/etc/glob
),用于扩展命令行中的通配符(如 *
和 ?
)。
后来,这种功能被集成到 shell(如 bash
)中,但名字保留了下来。
Glob 的发音:
"Glob" 的发音与 "globe"(地球、球体)相似,暗示这种模式匹配可以覆盖“全局”范围。
Glob 的核心思想是通过 通配符(Wildcards) 来匹配文件名或路径,例如:
*
匹配任意数量的字符。
?
匹配单个字符。
[]
匹配指定范围内的字符。
这些通配符使得用户可以轻松地匹配多个文件,而不需要手动列出每个文件的名字。
Glob:
语法简单,主要用于文件名匹配。
例如:*.txt
匹配所有 .txt
文件。
正则表达式:
语法复杂,功能强大,主要用于文本匹配。
例如:.*\.txt
匹配任意以 .txt
结尾的字符串。
Glob 的名字来源于 Global,体现了它的通用性和全局匹配的能力。它是一种简单而高效的模式匹配工具,专门用于文件名匹配。尽管它的功能不如正则表达式强大,但在日常文件操作中非常实用。