前言
在 Linux 系统中,正则表达式(Regular Expressions,简称 regex)是一个强大的工具,广泛应用于文本处理和数据筛选中。本文将结合实际讲解正则表达式的用法。(本文将以Ubuntu版本示例)
匹配符号
符号 描述 . 匹配任意单个字符(不包括换行符) * 匹配前面的字符0次或多次 ^ 匹配行的开始位置 $ 匹配行的结束位置 [] 匹配括号内的任意一个字符 [^] 匹配括号内的人一个字符的反义 \ 转义字符,用于匹配特殊字符 [:alnum:] 匹配字母和数字 [:alpha:] 匹配任何英文大小写字符 [:lower:] 匹配小写字母 [:upper:] 匹配大写字母 [:blank:] 匹配空格和制表符 [:space:] 匹配各种类型的空白字符 [:punct:] 匹配标点符号
匹配次数 描述 * 匹配前面的字符任意次 .* 匹配任意长度的任意字符 \? 匹配前面的字符0次或1次 \+ 匹配前面的字符最少1次 \{n\} 匹配前面的字符n次 \{m,n} 匹配前面的字符至少m次,至多n次 \{,n\} 匹配前面的字符至多n次 \{n,\} 匹配前面的字符至少n次
用法讲解
“.” 用法
[ root@ubuntu: ~ ] $ grep "r..t" / etc/ passwd
root : x: 0 : 0 : root: / root: / bin/ bash
[] 用法
[ root@ubuntu: ~ ] $ ls / etc/ | grep 'rc[0-6]'
rc0. d
rc1. d
rc2. d
rc3. d
rc4. d
rc5. d
rc6. d
[ root@ubuntu: ~ ] $ ls / etc/ | grep 'rc[.0-6].'
rc0. d
rc1. d
rc2. d
rc3. d
rc4. d
rc5. d
rc6. d
rc. local
[ root@ubuntu: ~ ] $ ls / etc/ | grep 'rc[.0-6]\.'
rc0. d
rc1. d
rc2. d
rc3. d
rc4. d
rc5. d
rc6. d
“*” 用法
[ root@ubuntu: / home] $ cat f5 | grep "ro*t"
** rt** ract raot ** rot** roat ** rooot**
“.*” 用法
[ root@ubuntu: ~ ] $ head - 3 / var / log/ syslog | tail - 1 | grep "r.*t"
2024 - 08 - 05T11: 46 : 15.523135 + 00 : 00 ubuntu2401 ke** rnel: KERNEL support** ed cpus:
“?” 用法
[ root@ubuntu: ~ ] $ grep "root/\?" / etc/ passwd
** root** : x: 0 : 0 : ** root** :
[ root@ubuntu: ~ ] $ head - 20 / var / log/ syslog | tail - 2 | grep ".*523147\?"
** 2024 - 08 - 05T11: 46 : 15.52314 ** 6 + 00 : 00 ubuntu2401 kernel: BIOS - e820: [ mem 0x00000000fee00000 - 0x00000000fee00fff ] reserved
** 2024 - 08 - 05T11: 46 : 15.523147 ** + 00 : 00 ubuntu2401 kernel: BIOS - e820: [ mem 0x00000000fffe0000 - 0x00000000ffffffff ] reserved
“+” 用法
[ root@ubuntu: ~ ] $ head - 20 / var / log/ syslog | tail - 2 | grep "0x0.*f\+"
2024 - 08 - 05T11: 46 : 15.523146 + 00 : 00 ubuntu2401 kernel: BIOS - e820: [ mem ** 0x00000000fee00000 - 0x00000000fee00fff ** ] reserved
2024 - 08 - 05T11: 46 : 15.523147 + 00 : 00 ubuntu2401 kernel: BIOS - e820: [ mem ** 0x00000000fffe0000 - 0x00000000ffffffff ** ] reserved
“\{n\}” 用法
[ root@ubuntu: ~ ] $ head - 20 / var / log/ syslog | tail - 11 | grep "[^f]f\{4\}]"
2024 - 08 - 05T11: 46 : 15.523141 + 00 : 00 ubuntu2401 kernel: BIOS - e820: [ mem 0x000000000009e800 - 0x00000000000 ** 9ffff** ] reserved
2024 - 08 - 05T11: 46 : 15.523142 + 00 : 00 ubuntu2401 kernel: BIOS - e820: [ mem 0x0000000000100000 - 0x000000007fe ** dffff** ] usable
2024 - 08 - 05T11: 46 : 15.523146 + 00 : 00 ubuntu2401 kernel: BIOS - e820: [ mem 0x00000000fec00000 - 0x00000000fec ** 0ffff** ] reserved
\{m,n\} 用法
[ root@ubuntu: ~ ] $ head - 20 / var / log/ syslog | tail - 11 | grep "[^f]f\{2,4\}]"
2024 - 08 - 05T11: 46 : 15.523141 + 00 : 00 ubuntu2401 kernel: BIOS - e820: [ mem 0x0000000000000000 - 0x000000000009e ** 7ff** ] usable
2024 - 08 - 05T11: 46 : 15.523141 + 00 : 00 ubuntu2401 kernel: BIOS - e820: [ mem 0x000000000009e800 - 0x00000000000 ** 9ffff** ] reserved
2024 - 08 - 05T11: 46 : 15.523142 + 00 : 00 ubuntu2401 kernel: BIOS - e820: [ mem 0x0000000000100000 - 0x000000007fe ** dffff** ] usable
2024 - 08 - 05T11: 46 : 15.523142 + 00 : 00 ubuntu2401 kernel: BIOS - e820: [ mem 0x000000007fee0000 - 0x000000007fef ** efff** ] ACPI data
2024 - 08 - 05T11: 46 : 15.523146 + 00 : 00 ubuntu2401 kernel: BIOS - e820: [ mem 0x00000000fec00000 - 0x00000000fec ** 0ffff** ] reserved
2024 - 08 - 05T11: 46 : 15.523146 + 00 : 00 ubuntu2401 kernel: BIOS - e820: [ mem 0x00000000fee00000 - 0x00000000fee0 ** 0fff** ] reserved
[ root@ubuntu: ~ ] $ ifconfig ens33 | grep 'inet' | cut - d' ' - f10 | head - 1
10.0 .0 .5
锚点符号
符号 描述 ^ 行首锚定, 用于模式的最左侧 $ 行尾锚定,用于模式的最右侧 ^PATTERN$ 用于模式匹配整行 ^$ 空行 ^[[:space:]]*$ 空白行 \< 或 \b 词首锚定,用于单词模式的左侧 \> 或 \b 词尾锚定,用于单词模式的右侧 \<PATTERN\> 匹配整个单词
“^” 用法
[ root@ubuntu: ~ ] $ grep "^#" / etc/ fstab
# / etc/ fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
“$” 用法
[ root@ubuntu: ~ ] $ grep "installation$" / etc/ fstab
# / was on / dev/ ubuntu- vg/ ubuntu- lv during curtin ** installation**
# / boot was on / dev/ sda2 during curtin ** installation**
“^$” 用法
[ root@ubuntu: ~ ] $ grep - v "^$" / etc/ profile
或 | 用法
[ root@ubuntu: ~ ] $ grep - E 'error|warning' / var / log/ syslog
[ root@ubuntu: ~ ] $ grep - E '\.(txt|md)$' filelist. txt
[ root@ubuntu: ~ ] $ grep - E '\d{4}-\d{2}-\d{2}|\d{2}/\d{2}/\d{4}' logfile. txt