正则表达式 常用

规定一些特殊语法表示字符类、数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示一个模式,这就是正则表达式(Regular Expression)。


egrep:grep -E,表示采用Extended正则表达式语法。
fgrep:grep -F,表示只搜索固定字符串而不搜索正则表达式模式,不会按正则表达式的语法解释后面的参数。


正则表达式参数用单引号括起来了,因为正则表达式中用到的很多特殊字符在Shell中也有特殊含义(例如\),只有用单引号括起来才能保证这些字符原封不动地传给grep命令,而不会被Shell解释掉。

1.字符类
.               匹配除换行符以外的任意一个字符 如:abc. 结果为 abcd, abc9 
[m-n]       匹配[]中的一个字符,减号-表示范围。数字或字符都可以。
[^xy]        匹配除x或y开头的任一字符,如排除x1,y2
[[:xxx:]]   预定义的 [[:alpha:]]匹配一个字母,[[:digit:]]匹配一个数字

\w 匹配字母或数字或下划线或汉字 [ a-z0-9A-Z_]

\s 匹配任意的空白符

\d 匹配数字 [0-9]    \d不一定好使

  • \W 匹配任意不是字母,数字,下划线,汉字的字符
  • \S 匹配任意不是空白符的字符
  • \D 匹配任意非数字的字符

2.数量限定符
x表示一个或多个字符或者一种模式  也可以理解为重复前面的次数
x?         x要匹配0或1次        Windows\d+匹配Windows后面跟1个或更多数字   单词  数字 0或1次
x+         x要匹配1或多次      ^\w+匹配一行的第一个单词(或整个字符串的第一个单词
x*          x要匹配0或多次   
x{n}      x要精确匹配n次 
x{m,n}  x匹配m到n次
x{m,}    x至少匹配m次
x{,n}     x最多匹配n次

3.位置限定符
^x       以x开头的行  [^x ] 匹配除了x以外的任意字符
x$       以x结尾的行
  ^$     空行
\<x      以x开头的单词
x\>      以x结尾的单词
\bx或 x\b    匹配x开头或x结尾的位置    \bat\b匹配... at ...,但不匹配cat、atexit、battry
\Bx或x\B    匹配x开头和x结尾的位置    \Bat\B匹配battery,但不匹配... attend、hat ...

\G 上一个匹配的结尾(本次匹配开始)

\A 字符串开头(类似^,但不受处理多行选项的影响)

\Z 字符串结尾或行尾(不受处理多行选项的影响)

\z 字符串结尾(类似$,但不受处理多行选项的影响)

例子:
cat  1.txt
at
i am at home
cat
attend
whatis this
thisatthis
>>grep '\bat\b' 1.txt
at
i am at home

>>grep '\Bat\B' 1.txt
whatis this
thisatthis


4.其他
\  转义 比如\.
() 作为一个整体
|  或   abc[d|f]  匹配abcd, abcf

 字符转义

  •  

grep -E  '^([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3})$' 1.txt
192.168.0.111
^  限制开头是3位 ,以防找出1192.168.xxx这种字符串
$  限制末尾是3位, 以防找出xxx.168.xxx.1111这种字符串
---------------

0[0-9]{2}-[0-9]{8}|0[0-9]{3}-[0-9]{7}

这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。

\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}    \d可换成[0-9]

这个表达式匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔。

假设 file.txt 内容如下:

leecode题目

987-123-4567
123 456 7890
(123) 456-7890
你的脚本应当输出下列有效的电话号码:

987-123-4567
(123) 456-7890

grep -E '^((\([0-9]{3}\)\s)|([0-9]{3}-))[0-9]{3}-[0-9]{4}$' file.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值