Skip to main content

5.正则表达式

在 Shell 编程中,正则表达式(Regular Expression,简称为 regex 或 regexp)是一种强大的模式匹配工具,用于在文本中搜索和匹配特定模式的字符串。Shell 支持使用正则表达式来进行字符串匹配、替换等操作。

基本的正则表达式(BRE)和扩展的正则表达式(ERE)

在 Shell 中,正则表达式分为基本的正则表达式(BRE)和扩展的正则表达式(ERE)。

  • BRE 是默认的正则表达式模式
  • ERE 则需要使用一些特殊的符号来启用。

BRE 示例:

# 匹配以 "pattern" 开头的行
grep "^pattern" file.txt

# 匹配包含 "word" 的行
grep "word" file.txt

ERE 示例:

# 使用 egrep 启用 ERE,匹配包含 "word" 或 "term" 的行
egrep "word|term" file.txt

# 在一些支持的工具中,可以使用 -E 选项启用 ERE
grep -E "word|term" file.txt

基本的正则表达式符号

  • .: 匹配任意单个字符。
  • *: 匹配前一个字符的零次或多次重复。
  • ^: 匹配行的开头。
  • $: 匹配行的结尾。
  • []: 匹配方括号中的任意一个字符。
  • \: 转义字符,用于取消特殊字符的意义。

扩展的正则表达式符号

  • +: 匹配前一个字符的一次或多次重复。
  • ?: 匹配前一个字符的零次或一次重复。
  • |: 或运算,匹配两个模式中的任意一个。

示例

# 使用 BRE 匹配以 "apple" 开头的行
grep "^apple" fruits.txt

# 使用 ERE 匹配包含 "apple" 或 "orange" 的行
egrep "apple|orange" fruits.txt

# 匹配任意单个字符后跟着数字的行
grep ".[0-9]" file.txt

# 匹配重复的单词 "word"
egrep "\<word\>.*\<word\>" text.txt

配合grep使用

grep "^error" logfile.txt		#匹配以 "error" 开头的日志行
grep -n "pattern" file.txt #匹配包含 "pattern" 的行并显示行号
grep -r "keyword" /path/to/directory #递归搜索文件夹中包含 "keyword" 的文件

配合sed使用

sed 's/apple/orange/g' file.txt	 	#将文件中所有的 "apple" 替换为 "orange"
sed '5a\New Line' file.txt #在第 5 行后插入一行文本 "New Line"
sed '/pattern/d' file.txt #删除包含 "pattern" 的行

配合awk使用

awk '$2 > 50' data.txt			#显示文件中第二列大于 50 的行
awk -F, '{print $1, $3}' file.csv #以逗号为分隔符显示第一列和第三列
awk '/pattern/ {print; print "New Line"; next} 1' file.txt #在匹配 "pattern" 的行后插入一行 "New Line"