标签: 实用技巧 00 匹配 正则表达式 ubuntu 用法 Linux grep root
目录
前言
在 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次
用法讲解
“.” 用法
// 过滤/etc/passwd文件中含有关键字的行
// ..代表两个任意字符,所以匹配的是r+两个任意字符+t
[root@ubuntu:~]$ grep "r..t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
[] 用法
// 过滤/etc目录下含有关键字的目录文件
// [0-6]表示只匹配0-6之间的任意一个字符,所以匹配的是rc上+0-6任意一个字符
[root@ubuntu:~]$ ls /etc/ | grep 'rc[0-6]'
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
// rc[.0-6].匹配到的是rc+任意.或0-6任意字符+一个任意字符
[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
“*” 用法
// 匹配以r开头,0个或多个o,以t结尾的字符串
[root@ubuntu:/home]$ cat f5 |grep "ro*t"
**rt** ract raot **rot** roat **rooot**
“.*” 用法
// 匹配以r开头一直延续到以t结尾的字符串
[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或者或者root/
// \?是因为?是特殊字符所以需要/进行转义
[root@ubuntu:~]$ grep "root/\?" /etc/passwd
**root**:x:0:0:**root**:/**root**:/bin/bash
// 匹配以523147或者52314为结尾的字符串
[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
“+” 用法
// 匹配0x0开头,至少有一个f结尾的字符串
[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\}” 用法
// 匹配只有4个连续f的行
[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\} 用法
// 匹配2-4个f连续f的行
[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
// 获取ip地址
[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
“$” 用法
// 锚定installation结尾的行
[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
或 | 用法
// 找出所有含error和warning的行
// -E是启用扩展正则表达式
[root@ubuntu:~]$ grep -E 'error|warning' /var/log/syslog
// 找出所有.txt和.md文件的行
// -E开启扩展正则表达式,$匹配行尾
[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
标签: 实用技巧 ,
00 ,
匹配 ,
正则表达式 ,
ubuntu ,
用法 ,
Linux ,
grep ,
root
From: https://blog.csdn.net/qq_61062301/article/details/141069580