正则表达式

目录

一、正则表达式

1.1 正则符

1.2 通配符

二、正则三剑客

2.1 grep

2.2 sed

2.3 awk


一、正则表达式

1.1 正则符

在使用正则表达式的时候,当前环境的语系十分重要,不同的语系会导致不同的选取结果。为了避免编码造成的英文和数据选取问题,因此有些特殊符号定义如下表:

特殊符号代表意义
[:alnum:]表示英文大小写字符和数字;即a-z,A-Z,0-9
[:alpha:]表示英文大小写字符;即a-z,A-Z
[:digit:]表示数字;即0-9
[:lower:]表示小写字符;即a-z
[:upper:]表示大写字符;即A-Z

 

正则表达式特殊字符归纳如下表所示:

基础正则表达式
正则符说明
.表示一个任意字符。
*表示重复前一个字符任意次。可以是零次,此时表示空字符。
.*表示零个或多个任意字符。
\转义符,表示取消特殊符号的特殊意义。
^表示行首。在中括号内表示取反。
$

表示行尾。

在Windows中,使用的断行字符为 '^M$' (即 CR、LF);在LInux中,使用的断行字符为 '$' (即 LF)。

[xyz]中括号内无论几个字符,都代表一个待查找的字符。
[n1-n2]中括号内的'-'是有特殊含义的,表示两个字符之间所有连续的字符都是待查找的字符。
[^xyz]中括号内的'^'是有特殊含义的,表示反向选择。
\{n,m\}

连续n到m个的前一个字符。\{n\}:连续n个的前一个字符。\{n,\}:连续n个以上的前一个字符。

 
扩展正则表达式
+重复一个或多个前一个字符。
重复零个或一个前一个字符。
|用 ‘或’ 的方式查出数个字符串。
(x)找出 “组” 字符串。
(x)+多个重复组的判别。

 

1.2 通配符

在Linux的bash操作环境下有一个常用功能,叫做通配符,常用通配符如下表所示:

符号说明
*表示零个到无穷多个任意字符。
表示一定有一个任意字符。
[abc]表示一定有一个在中括号内的字符。(示例 '[abc]' 的含义:选取 a、b、c中的一个字符)
[a-c]表示在编码顺序内的所有字符,都会被选取(示例 '[a-c]' 的含义:选取 a、b、c中的一个字符)
[^abc]表示反向选取中括号内的字符。(示例 '[^abc]' 的含义:选取 a、b、c以外的所有字符)

看起来正则符与通配符相差不大,但是实际上并不相同,不能弄混淆了,更不能相互乱用。例如,通配符中的 '*' 表示零个到无穷多个任意字符,而正则符中的 '*' 表示重复前一个字符任意次。

 

二、正则三剑客

2.1 grep

grep:主要是分析一行数据,满足我们所需的,就取出该行;grep默认支持基础正则表达式语法;若要支持扩展型正则表达式语法,需要使用egrep(或grep  -E)。

指令格式:grep  [-cinv]   '查找字符串'   filename
参数说明
-c计算找到 “查找字符串” 的次数。
-i在查找的时候,忽略大小写的不同。
-n顺便输出行号。
-v反向选择。
-An后面接数字,除了列出当前行,还列出后面 n 行。
-Bn后面接数字,除了列出当前行,还列出前面 n 行。
--color=auto将找到的关键字,着色显示。

示例:

 

2.2 sed

sed :以行为单位进行数据的替换、删除、新增、选择。

指令格式:sed  [-nefr]  [动作]
参数说明
-n表示只有经过sed特殊处理的那一行才会被列出来。不使用该参数,则所有数据会全部列出来。
-e直接在命名行模式下进行sed的动作编辑。
-f直接将sed的动作编辑,写在一个文件内。
-r表示支持扩展型正则表达式的语法。不使用该参数,则默认使用基础正则表达式语法。
-i直接修改、读取文件的内容,而不是由屏幕输出。
 
动作说明:'[n1[, n2]]Function'
Function代表含义
a新增,a的后面可以接字符串,这些字符串会出现在新的一行(目前的下一行)。
c替换,c的后面可以接字符串,这些字符串可以替换n1到n2之间的行。
d删除,d的后面不用接字符串。
i插入,i的后面可以接字符串,这些字符串会出现在新的一行(目前的上一行)。
p打印,将某个选项的数据打印出来,通常p会与 ‘-n’ 参数一起使用。
s替换,可以直接进行替换的工作,通常搭配正则表达式一起使用。

示例:

 

2.3 awk

awk :处理每一行的字段内的数据,默认的字段分隔符为 “空格键” 或 “Tab键” 。

指令格式:awk  '条件1  {动作1}  条件2  {动作2}  ...'   filename
变量名称代表含义
$0在每一行的每个字段都有变量名称,$0代表一整行数据的意思。
$1、$2、$3表示以分隔符分隔的第一、第二、第三字段。
NF每一行($0)拥有的字段总数。
NR当前所处理的是第几行数据。
FS目前的分隔符,默认是空格。
BEGIN最先处理动作的条件。可以预先设置分隔字符。
END最后处理动作的条件。

示例:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值