正则表达式

10 篇文章 0 订阅

正则表达式

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。

基本语法

一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串。

  • 选择

    |竖直分隔符表示选择,例如"boy|girl"可以匹配"boy"或者"girl"
    
  • 数量限定

    数量限定除了常用的*,还有+加号,?问号,
    如果在一个模式中不加数量限定符则表示出现一次且仅出现一次:
    
    +表示前面的字符必须出现至少一次(1 次或多次),
    例如,"goo+gle",可以匹配"gooogle","goooogle"等;
    ?表示前面的字符最多出现一次(0 次或 1 次),
    例如,"colou?r",可以匹配"color"或者"colour";
    *星号代表前面的字符可以不出现,也可以出现一次或者多次、
    (0 次、或 1 次、或多次),
    例如,“0*42”可以匹配 42、042、0042、00042 等。
    
  • 范围和优先级

    ()圆括号可以用来定义模式字符串的范围和优先级,
    这可以简单的理解为是否将括号内的模式串作为一个整体。
    例如,"gr(a|e)y"等价于"gray|grey",
    (这里体现了优先级,竖直分隔符用于选择 a 或者 e ),
    "(grand)?father"匹配 father 和 grandfather
    (这里体现了范围,?将圆括号内容作为一个整体匹配)。
    
  • 语法(部分)

    正则表达式有多种不同的风格,下面列举一些常用的适用于
    perl和python编程语言及grep或egrep的正则表达式匹配规则:
    
字符描述
\将下一个字符标记为一个特殊字符、或一个原义字符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。序列“\”匹配“\”而“(”则匹配“(”
^匹配输入字符串的开始位置
$匹配输入字符串的结束位置
{n}n 是一个非负整数。匹配确定的 n 次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个 o
{n,}n 是一个非负整数。至少匹配 n 次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有 o。
{n,m}m 和 n 均为非负整数,其中 n<=m。最少匹配 n 次且最多匹配 m 次
*匹配前面的子表达式零次或多次
+匹配前面的子表达式一次或多次。
?匹配前面的子表达式零次或一次
.匹配除“\n”之外的任何单个字符
(pattern)匹配 pattern 并获取这一匹配的子字符串
[xyz]字符集合(character class)。匹配所包含的任意一个字符
[a-z]字符范围。匹配指定范围内的任意字符
[^xyz]排除型(negate)字符集合。匹配未列出的任意字符
[^a-z]排除型的字符范围。匹配任何不在指定范围内的任意字符
  • 优先级
    优先级为从上到下从左到右,依次降低:
运算符说明
\转义符
(), (? : ), (?=), []括号和中括号
*、+、?、{n}、{n,}、{n,m}限定符
^、$、\任何元字符定位点和序列
选择

grep 模式匹配命令

 grep命令用于打印输出文本中匹配的模式串,
 它使用正则表达式作为模式匹配的条件。
 grep支持三种正则表达式引擎,分别用三个参数指定:
参数说明
-EPOSIX 扩展正则表达式,ERE
-GPOSIX 基本正则表达式,BRE
-PPerl 正则表达式,PCRE
grep命令常用参数:
参数说明
-b将二进制文件作为文本来进行匹配
-c统计以模式匹配的数目
-i忽略大小写
-n显示匹配文本所在行的行号
-v反选,输出不匹配行的内容
-r递归匹配查找
-A nn 为正整数,表示 after 的意思,除了列出匹配行之外,还列出后面的 n 行
-B nn 为正整数,表示 before 的意思,除了列出匹配行之外,还列出前面的 n 行
–color=auto将输出中的匹配项设置为自动颜色显示
使用:
查找/etc/group文件中以以mysql开头的行
grep '^mysql' /etc/group
将匹配以'z'开头以'o'结尾的所有字符串
echo 'zero\nzo\nzoo' | grep 'z.*o'
将匹配以'z'开头以'o'结尾,中间包含一个任意字符的字符串
echo 'zero\nzo\nzoo' | grep 'z.o'
将匹配以'z'开头,以任意多个'o'结尾的字符串
echo 'zero\nzo\nzoo' | grep 'zo*'
grep默认是区分大小写的,这里将匹配所有的小写字母
echo '1234\nabcd' | grep '[a-z]'
排除字符
echo 'geek\ngood' | grep '[^o]'

sed 流编辑器

用于过滤和转换文本的流编辑器
sed 命令基本格式:
sed [参数]... [执行命令] [输入文件]...
# 形如:
sed -i 's/sad/happy/' test # 表示将test文件中的"sad"替换为"happy"
参数说明
-n安静模式,只打印受影响的行,默认打印输入数据的全部内容
-e用于在脚本中添加多个执行命令一次执行,在命令行中执行多个命令通常不需要加该参数
-ffilename 指定执行 文件中的命令
-r使用扩展正则表达式,默认为标准正则表达式
-i将直接修改输入文件内容,而不是打印到标准输出设备
执行命令格式
[n1][,n2]command
[n1][~step]command
其中一些命令可以在后面加上作用范围,形如:
sed -i 's/sad/happy/g' test # g表示全局范围
sed -i 's/sad/happy/4' test # 4表示指定行中的第四个匹配字符串

其中 n1,n2 表示输入内容的行号,它们之间为,逗号则表示从 n1 到 n2 行,如果为~波浪号则表示从 n1 开始以 step 为步进的所有行;command 为执行动作,下面为一些常用动作指令:

命令说明
s行内替换
c整行替换
a插入到指定行的后面
i插入到指定行的前面
p打印指定行,通常与-n参数配合使用
d删除指定行
打印passwd 2-5行
nl passwd | sed -n '2,5p'
打印奇数行
nl passwd | sed -n '1~2p'
将输入文本中"ceshiti" 全局替换为"hehe",并只打印替换的那一行,
注意这里不能省略最后的"p"命令
sed -n 's/ceshiti/hehe/gp' passwd
删除第30行
sed -i '30d' passwd
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值