linux基础:shell中的正则表达式用法大全

在Linux系统中,正则表达式(RegularExpression)是通过一些特殊字符的排列,用以查找、替换、删除等操作的强大工具,对于每一个Linux用户,都是非常重要的。
在现有的系统中,正则表达式也分为基础正则表达式(grep),扩展正则表达式(egrep)。在正式了解正则表达式之前,先了解一些相关的字符概念,它们在正则表达式中都有特殊的含义与用法。

对于基础正则表达式grep而言,每个特殊字符分别有不同的匹配:

1.字符匹配:

.     :匹配任意单个字符
       [ ]    :匹配范围内的任意单个字符,如[0-9],[a-z],[A-Z]...
       [^ ]   :匹配范围外的任意单个字符
        [:digit:]:匹配任意单个数字,0-9
     [:lower:]:匹配任意单个小写字母,a-z
     [:upper:]:匹配任意单个大写字母,A-Z
     [:alpha:]:匹配任意单个字母,包含大小写a-z,A-Z
     [:alnum:]:匹配任意单个字符,包含a-z,A-Z,0-9
     [:space:]:匹配任意会产生空白的字符

2.次数匹配:用在要指定其出现的次数的字符后面,用以限制其前面的字符要出现的次数;
     
     *:匹配前面的字符任意次(0,1或多次);
      grep "x*y":
       xxxyabc:匹配3次
       yabc:匹配0次
       abcxy:匹配一次
       abcy:匹配0次

.*:匹配任意长度的任意字符;

\+:匹配前面的字符至少1次;
      grep "x\+y":
       xxxyabc:匹配3次
       yabc:不匹配
       abcxy:匹配一次
       abcy:不匹配

\?:匹配前面的0次或1次,即前面的字符可有可无;
      grep "x\?y":
       xxxyabc:匹配1次
       yabc:匹配0次
       abcxy:匹配1次
       abcy;匹配0次

\{m\}:其前面的字符出现m次,m为非负整数;
      grep "x\{2\}y":
       xxxyabc:匹配
       yabc:不匹配
       abcxy:不匹配
       abcy:不匹配

\{m,n\}:其前面的字符出现m次,m为非负整数;[m,n]
      \{0,n\}:至多n次;
      \{m,\}:至少m次;
      \{m,n\}:前面的字符至多出现n次,至少m次
      
3.位置锁定:限制使用模式搜索文本,限制模式所匹配到的文本只能出现于目标文本的特定位置;
     
     ^:行首锁定;用于模式的最左侧,^PATTERN
     $:行尾锁定;用于模式的最右侧,PATTERN$
      ^PATTERN$:要让PATTERN完全匹配一整行;
      ^$:空行;
      ^[[:space:]]*$:以空格为开头的,以任意字符为结尾的行
      
       单词锁定:由非特殊字符组成的连续字符(字符串)都称为单词;
 
     \<或\b:词首锁定,用于单词模式的左侧,格式为\<PATTERN, \bPATTERN
     \>或\b:词尾锁定,用于单词模式的右侧,格式为PATTERN\>, PATTERN\b
      \<PATTERN\>:单词锁定;

以下通过一些例子来介绍相关用法:

时间: 2024-12-12 14:18:48

linux基础:shell中的正则表达式用法大全的相关文章

linux bash shell中for的用法and示例

关于linux bash shell中的for语句 在linux中shell是必不可少的一部分,但是在bash shell中有while,for,until等循环命令,今天就介绍一下关于for的一些用法.文中任何错误希望大佬们一一指出,不胜感激. bash shell中提供了for命令,用于创建通过一系列值重复的循环,每次重复使用系列中的一个值执行一个定义的命令集. for语句的基本格式如下: for---in list do commands done 在参数list中提供一系列用于迭代(上一

MySQL中REGEXP正则表达式使用大全

REGEXP在mysql是用来执行正则表达式的一个函数 像php中的preg之类的函数了,regexp正则函数如果只是简单的查询使用like即可,但复杂的还是需要使用regexp了,下面我们来看看. MySql用户手册建议,在构造简单查询时,仍使用通配符. 如:Select [*|fieldname list] From [tablename] where [fieldname] like ["%someletter"|"%someletter%","_&

c#正则表达式用法大全

c#正则表达式用法大全  只能输入数字:"^[0-9]*$". 只能输入n位的数字:"^\d{n}$". 只能输入至少n位的数字:"^\d{n,}$". 只能输入m~n位的数字:."^\d{m,n}$" 只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$". 只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$". 只能输入有1~3位小数的正实数:&quo

Linux下shell中case命令详解(常规的break、无条件继续和有条件继续)

linux下shell中的case名字和C/C++中的switch类似,但是shell中的case更强大和复杂. 1.强大主要体现在:shell中case中的关键字可以是字符串类型,而每一项中可以包含正则表达式. 2.复杂主要体现在:shell中case的每一个项后有三个选择:break(常规的break).unconditional follow up(无条件继续)和conditional follow up(有条件继续). 这篇文章的重点是上面的第2点. case的无条件继续和有条件继续是b

String的replaceAll方法中的正则表达式用法

项目里面 需要对已手机号码进行 如下的显示 比如15088688388 要显示为150****8388的效果 实现这个简单的效果 方法有很多 我想试试用正则表达式去实现 查了点资料最终试出来以下方法可行 System.out.println("15088688388".replaceAll("(\\d{3})(\\d{4})","$1****")); 输出结果:150****8388 首先对replaceAll方法的第一个参数进行解释 第一个参数

&nbsp; shell中的select用法

select也是循环的一种,它比较适合用在用户选择的情况下.比如,我们有一个这样的需求,运行脚本后,让用户去选择数字,选择1,会运行w命令,选择2运行top命令,选择3运行free命令,选择4退出.脚本这样实现: #!/bin/bash echo "Please chose a number, 1: run w, 2: run top, 3: run free, 4: quit" echo select command in w top free quit do case $comma

Linux的shell中echo改变输出显示样式

Linux的shell中echo改变输出显示样式 echo -e "\033[32;49;1m [DONE] \033[39;49;0m" 或echo -e "\e[32;49;1m [DONE] \033[39;49;0m" 输出结果 :[DONE] 文本终端的颜色可以使用“ANSI非常规字符序列”来生成.举例: echo -e "\033[44;37;5m ME \033[0m COOL" 以上命令设置背景成为蓝色,前景白色,闪烁光标,输出字

(转)Shell中read的用法详解

Shell中read的用法详解 原文:http://blog.csdn.net/jerry_1126/article/details/77406500 read的常用用法如下: read -[pstnd] var1 var2 ... -p 提示语句-n 字符个数-s 屏蔽回显-t 等待时间-d 输入分界 [plain] view plain copy 01). read                           # 从标准输入读取一行并赋值给特定变量REPLY [email prote

[转] linux下shell中使用上下键翻出历史命名时出现^[[A^[[A^[[A^[[B^[[B的问题解决,Linux使用退格键时出现^H解决方法

[From] https://www.zmrbk.com/post-2030.html https://blog.csdn.net/suifengshiyu/article/details/40952771 我的理解是,如果出现如题所描述的问题,这是因为使用了不同的shell程序和对应的stty设置对应关系所综合作用的结果. 这是/bin/sh里面stty -a命令输出的信息: $ stty -a speed 38400 baud; rows 43; columns 209; line = 0;