首页 > 系统相关 >已整理-Linux正则表达式

已整理-Linux正则表达式

时间:2022-10-20 09:59:07浏览次数:54  
标签:字符 匹配 正则表达式 etc passwd 锚定 Linux 整理 grep

 

目录:

  1、基本正则表达式

  2、扩展正则表达式

  3、示例

 

1、基本正则表达式
1.1、字符匹配

.             匹配任意单个字符,不含空格
[]             匹配指定范围内的任意字符,如:[a-z]、[A-Z]、[0-9]
[^]            匹配指定范围外的任意单个字符,取反
[:alnum:]        字母和数字,与[A-Za-z0-9]等价
[:alpa:]         字母,与[A-Za-z]等价
[:digit:]        数字,与[0-9]等价
[:xdigit:]       十六进制字符,与[0-9A-Fa-f]等价
[:blank:]        空格和制表符
[:lower:]        小写字母
[:upper:]        大写字母
[:space:]        空白字符,等价于[\t\r\n\v\f]
[:punct:]        标点符号

 

1.2、匹配次数
用在要指定次数的字符后面,用于指定前面的字符要出现的次数;

*          贪婪模式, 匹配*号前面的字符任意次,仅表示次数: 0 次或多次(>=0次), 与匹配文件的通配符意义不一样
.*          任意长度的任意字符,含空格
\?          匹配其前面的字符0或1次,即前面的字符可有可无
\+          匹配其前面的字符至少1次
\{m,n\}       匹配至少m次,最多n次
\{m\}        匹配前面的字符m次
\{m,\}       匹配前面的字符至少m次,多则不限

 

1.3、位置锚定

^            行首锚定, 如:^root
$            行尾锚定, 如:bash$
^PATTERN$       用于模式匹配整行,如: ^$ 表示空间

\<或\b         词首锚定,用于单词模式的左侧
\>或\b         词尾锚定,用于单词模式的右侧
\<PATTERN\>      匹配整个单词

 

1.4、分组

\(\)    将1个或多个字符捆绑在一起,当做一个整体进行处理,如: \(xy\)*ab

分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3....
\1      从左侧起,第1个左括号以及与之匹配右括号之间的模式所匹配到的字符

 

后向引用分组:
引用前面的分组括号中的模式所匹配字符, 而非模式本身

 

2、扩展正则表达式
2.1 元字符字符匹配

.          匹配任意单个字符,不含空格
[]         匹配指定范围内的任意字符,如:[a-z]、[A-Z]、[0-9]
[^]        匹配指定范围外的任意单个字符,取反

 

2.2 次数匹配

*          贪婪模式, 匹配*号前面的字符任意次,仅表示次数: 0 次或多次(>=0次), 与匹配文件的通配符意义不一样
?          匹配其前面的字符0或1次,即前面的字符可有可无
+          匹配其前面的字符至少1次
{m}         匹配前面的字符m次
{m,n}        匹配至少m次,最多n次

 

2.3 锚定

^          行首锚定, 如:^root
$          行尾锚定, 如:bash$
\<,\b        词首锚定,用于单词模式的左侧
\>,\b        词尾锚定,用于单词模式的右侧

 

2.4 分组
()

 

2.5 或者表示

a|b      a或b
C|cat     C或cat

 

 3、示例

3.1 显示/proc/meminfo 文件中以大小s开头的行,要求:使用2种方式实现

# cat /proc/meminfo |grep '^[Ss]'
# cat /proc/meminfo |egrep '^(S|s)'

 

3.2 显示/etc/passwd 文件中不以/bin/bash结尾的行;

# cat /etc/passwd|grep -v 'bash$'

 

3.3 显示/etc/passwd 文件中ID号最大的用户的用户名;

# grep `cat /etc/passwd |cut -d : -f 3|sort -rn|head -1` /etc/passwd
# sort -t: -k3 -n /etc/passwd|tail -1|cut -d: -f1

 

3.4 如果用户root存在,显示其默认的shell程序;

# grep '^root\b' /etc/passwd &> /dev/null && grep "^root\b" /etc/passwd|cut -d: -f7

 

3.5 找出/etc/passwd 中的2位或3位数;

# grep '\<[0-9]\{2,3\}\>' /etc/passwd

 

3.6 显示/etc/rc.d/rc.sysinit 文件中,至少以一个空白字符开头的且后面存在非空白字符的行;

# grep '^[[:space:]]\+[^[:space:]]' /etc/grub2.cfg        #centos 7 没有/etc/rc.d/rc.sysinit 这个文件

 

3.7 找出"netstat -tan"命令的结果中以'LISTEN'后缀0、1或多个空白字符结尾的行;

# netstat -tan|grep "LISTEN[[:space:]]*$"

 

3.8 添加用户bash 、testbash、basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行;

# useradd bash
# useradd basher
# useradd testbash
# useradd -s /sbin/nologin nologin
# grep '^\([[:alnum:]]\+\>\).*\1$' /etc/passwd

 

3.9 匹配ip地址

# ip addr |egrep -o '([0-9]+\.){3}[0-9]+'

 

3.10 显示当前系统root、centos或user1用户的默认shell和UID

# grep -E '^\<(root|centos|user1)\>' /etc/passwd

 

3.11 找出/etc/rc.d/init.d/functions文件(centos 6)中某单词后面跟一个小括号的行;

# egrep '[[:alpha:]]+\(.*\)' haha.txt

 

3.12 使echo 输出一个路径,使用egrep取出其基名(类似于basename命令);

# echo '/mnt/sdc/' |egrep -o "[^/]+/?$"|cut -d"/" -f1

 

3.13 找出ifconfig命令结果中1-255之间的数值;

# ifconfig |egrep '\<[1-9]{1}([0-9]{0,2})\>'

 

标签:字符,匹配,正则表达式,etc,passwd,锚定,Linux,整理,grep
From: https://www.cnblogs.com/reachos/p/16808669.html

相关文章

  • Linux 启用rsyslog的启用网络日志服务
    网络日志服务功能:  将多个远程主机的日志集中发送到一台日志服务器上存储,方便后期的管理。说明:  rsyslog服务和apache、php一样基于模块化设计,需要启用对应的功能就......
  • Linux软链接的创建与删除
    软链接的创建:ln -s  [源文件或目录] [目标文件或目录]软链接的删除 rm–rf软链接名称(请注意不要在后面加”/”) ......
  • [Linux传奇]Linux之前,Unix的历史.
    [Linux传奇]Linux之前,Unix的历史一个伟大的梦想-----Multics在很久很久以前,有一个伟大的计划-----Multics.Multics是一个分时操作系统,该系统开始作为一个合资项目,是196......
  • 【2022.10.20】Linux入门基础(3)
    内容概要1.目录结构说明2.重要目录数据信息3.网络不通排查流程4.etc目录下重要的数据文件5.usr目录下重要的数据文件6.proc目录下重要的数据文件7.系统优化相关......
  • Linux:论如何在虚拟机上挂载多个镜像?
    欢迎来到千汐 博客名称:千汐染琼博客网址:https://www.cnblogs.com/zhangxiaomin/寄语:无数次从睡梦中醒来,忘记了我是谁worldcookie 我可能是第一个提出这个疑问......
  • Linux系统下追加记录到文件中的实例代码解读
    今日阅读Linux程序设计第四版,找到一个使用mmap函数的实例问题描述该程序主要定义一个结构体,随后利用mmap,msync以及munmap函数对其进行内容追加,定位以及修改内容的操......
  • 做题记录整理图论/tarjan P5058 [ZJOI2004]嗅探器(2022/10/19)
    P5058[ZJOI2004]嗅探器首先,我们应该马上发现它求的和割点非常像,但是是对于两个点而言的割点这时候就需要对tarjan有着比较深入的理解(也可能是我太拉了)如果我们以其中一......
  • 【whk向】数学随感整理
    目录1导数1.1老教材导数的应用1.2导数证明不等式1导数1.1老教材导数的应用1.2导数证明不等式......
  • Linux源码编译——添加新模块
    C源码文件(如new_module.c)添加到适当目录在menuconfig中增加新条目:修改C源码文件所在目录下的Kconfig文件,参考该文件中已有的编译选项照猫画虎,添加新的项configNEW_MOD......
  • Linux实战笔记_CentOS 7中格式化磁盘
    fdisk-l#检查是否添加成功(添加一块磁盘并重启计算机后)fdisk/dev/sdb#格式化磁盘mount/dev/sdb1/opt#挂载到/opt目录df-h......