首页 > 系统相关 >提高效率:Linux 正则表达式实用技巧

提高效率:Linux 正则表达式实用技巧

时间:2024-08-10 19:26:29浏览次数:7  
标签:实用技巧 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

相关文章

  • 一文带你快速掌握Linux常用命令(图文并茂+超详细!)
    作者简介:......
  • 【Linux必备工具】自动化构建工具makefile的使用详解
    ✨                        听风八百遍,才知是人间    ......
  • 【书生大模型实战营(暑假场)闯关材料】入门岛:第1关 Linux 基础知识
    【书生大模型实战营(暑假场)闯关材料】入门岛:第1关Linux基础知识1.使用VScode进行SSH远程连接服务器2.端口映射及实例参考文献这一博客主要介绍使用VScode进行服务器远程连接及端口映射。1.使用VScode进行SSH远程连接服务器安装VScode,添加extensionRemote-SSH。......
  • linux系统网络编程
     网络核心概念网络:通过有线或无线的链路连接多个计算机设备进行数据通信或设备控制介质:双绞线,同轴电缆,光纤无线:WIFL,移动网络,蓝牙,红外,NFC设备:计算机,交换机,路由器,IOT在网络编程中,应用层协议编程是非常关键的一部分,因为它直接涉及到了如何在不同的应用程序之间交换数据......
  • linux系统磁盘管理
    linux系统磁盘管理硬盘命名在设备名称的定义规则如下,其他的分区可以以此类推系统的第⼀块SCSI接⼝的硬盘名称为/dev/sda系统的第⼆块SCSI接⼝的硬盘名称为/dev/sdb系统中分区由数字编号表示,1~4留给主分区使⽤和扩展分区,逻辑分区从5开始有些存放数据的设备并不是直接......
  • Linux内核解读(1)--内存管理与malloc原理
        本文主要关注Linux环境的堆内存的管理,详细解析Glibc与TCMalloc的malloc原理, 由于本人能力有限,难免会出现解读错误的地方,望各位大佬批评指正,后面也会在进一步解读中对本文进行修改。1、Linux内存分布        下图的布局形式是在内核2.6.7以后才引入的,......
  • Linux问题调试(4)--内存问题与tcmalloc
    1、问题概述      之前的文章介绍过Asan来定位内存泄漏问题,虽然已经被集成到各大编译器中,‌但它的使用可能受到特定环境或配置的限制。‌例如,‌在某些复杂的系统或应用程序中,‌ASan可能会因为与程序的交互复杂性而遇到挑战,‌导致难以准确诊断问题。‌Linux问题调试(2)--......
  • 使用Linux实现FTP云盘项目2
    实现功能:ls———查看服务端文件lls———查看客户端自己的文件cd———切换服务端目录lcd———切换客户端自己的目录切换成功put———上传文件get———下载文件服务器端:客户端:源码:#include<sys/types.h>/*SeeNOTE......
  • 详解linux后台、前台运行进程
    程序运行可以有2种前台运行程序运行在当前的终端,所有的信息都输出到屏幕上,占用你的终端,你也无法继续使用如果终端异常关闭,导致程序会自动退出后台运行不会占用你的终端,程序在系统后台跑着,你该干啥干啥,终端关了,程序也继续运行。后台运行命令命令集合command&#未启动......
  • Linux计划任务
    Linux计划任务Linux计划任务是系统管理和自动化的重要工具,可以减少人工干预、提高工作效率,并有效管理系统资源和维护。使用恰当的工具,可以显著提升系统的可靠性和运行效率。1.一次性计划任务at1.1下载安装yum-yinstallat#yum下载安装systemctlstartatd......