风小逍陪你一起学习SHELL编程 - 正则表达式

2026年01月22日/ 浏览 5

在Shell中,正则表达式通常用于文本处理和模式匹配。Shell支持不同的正则表达式引擎,其中最常见的是基于POSIX标准的正则表达式引擎。

正则表达式常用元字符和语法:

.(点):匹配任意单个字符,除了换行符。

正则表达式:a.b 匹配 "axb"、"aab" 等。

*:匹配前面的字符零次或多次。

正则表达式:a*b 匹配 "ab"、"aab"、"aaab" 等。

+:匹配前面的字符一次或多次。

正则表达式:a+b 匹配 "ab"、"aab" 等。

?:匹配前面的字符零次或一次。

正则表达式:a?b 匹配 "ab" 和 "b"。

[]:匹配字符集中的任何一个字符。

正则表达式:[aeiou] 匹配任何元音字母。

[^]:匹配不在字符集中的任何一个字符。

正则表达式:[^0-9] 匹配任何非数字字符。

|:逻辑或操作,用于匹配多个模式中的一个。

正则表达式:pattern1|pattern2 匹配 "pattern1" 或 "pattern2"。

^:匹配行的开头。

正则表达式:^start 匹配以 "start" 开头的行。

$:匹配行的结尾。

正则表达式:end$ 匹配以 "end" 结尾的行。

\:转义字符,用于匹配特殊字符本身。

正则表达式:\. \* \+ 匹配 ".", "*", "+" 字符。

():用于创建捕获组,可以将匹配的子字符串提取出来。

正则表达式:(\d{2})-(\d{2})-(\d{4}) 匹配日期,并创建三个捕获组,分别匹配日、月和年。

\d、\D、\w、\W、\s、\S、:字符类别缩写,分别匹配数字、非数字、字母、非字母、空白字符、非空白字符。\b 表示单词边界(word boundary)。用于匹配单词的开始或结束位置,而不匹配具体的字符。

正则表达式:\d{3} 匹配三个连续数字。

正则表达式示例:

匹配文本:你可以使用grep命令来查找文件中与正则表达式匹配的文本行。

grep pattern filename

例如,要在文件example.txt中查找包含"apple"的行,可以使用以下命令:

grep apple example.txt

使用.匹配任意字符:.表示匹配任意单个字符。

grep a.b filename

例如,要查找包含"aab"、"axb"等的行,可以使用上述命令。

使用*匹配零个或多个字符:*表示匹配前面的字符零次或多次。

grep a*b filename

例如,要查找包含"ab"、"aab"、"aaab"等的行,可以使用上述命令。

使用+匹配一个或多个字符:+表示匹配前面的字符一次或多次。

grep a+b filename

例如,要查找包含"ab"、"aab"等的行,可以使用上述命令。

使用?匹配零个或一个字符:?表示匹配前面的字符零次或一次。

grep a?b filename

例如,要查找包含"ab"和"b"的行,可以使用上述命令。

使用[]匹配字符集:[]用于匹配字符集中的任何一个字符。

grep [aeiou] filename

例如,要查找包含任何元音字母的行,可以使用上述命令。

使用^和$匹配行的开头和结尾:^表示匹配行的开头,$表示匹配行的结尾。

grep ^start filename grep end$ filename

例如,要查找以"start"开头和以"end"结尾的行,可以使用上述命令。

使用|进行逻辑或操作:|用于在正则表达式中执行逻辑或操作。

grep pattern1\|pattern2 filename

例如,要查找包含"pattern1"或"pattern2"的行,可以使用上述命令。

匹配IP地址:

# 匹配IPv4地址 grep -oE \b([0-9]{1,3}\.){3}[0-9]{1,3}\b your_file.txt # 匹配IPv6地址 grep -oE \b[0-9a-fA-F:]+\b your_file.txt

这些命令将从your_file.txt文件中提取匹配的IPv4和IPv6地址。你可以根据需要修改正则表达式。

匹配HTTP网址:

grep -oE https?://\S+ your_file.txt

这个命令将从your_file.txt文件中提取匹配的HTTP和HTTPS网址。

匹配电话号码:

grep -oE \b[0-9]{3}-[0-9]{3}-[0-9]{4}\b your_file.txt

这个命令将从your_file.txt文件中提取匹配的电话号码,格式为"xxx-xxx-xxxx"。

匹配邮箱地址:

grep -oE \b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b your_file.txt

这个命令将从your_file.txt文件中提取匹配的标准邮箱地址。

以上的命令使用了grep命令的-o选项,它用于只输出匹配的部分,而不是整行文本。正则表达式使用了扩展正则表达式语法(-E选项),这使得更复杂的正则表达式模式得以支持。

未完待续...

picture loss