首页 > 其他 > 详细

正则表达式

时间:2020-01-03 17:01:36      阅读:93      评论:0      收藏:0      [点我收藏+]
\反斜线,转义特殊字符
$ cat data2 
The cost is $4.00 
$ sed -n /\$/p data2 
The cost is $4.00
锚字符
^匹配行首
$ cat data3 
This is a test line. 
this is another test line. 
A line that tests this feature. 
Yet more testing of this 
$ sed -n /^this/p data3 
this is another test line.
$匹配行尾
[root@localhost ~]# sed -n /this$/p data3.txt 
Yet more testing of this
.点号用来匹配除换行符以外的任意单个字符。
[root@localhost ~]# cat data6.sh 
The cat is sleeping. 
That is a very nice hat. 
This test is at line four. 
at ten oclock well go home.
匹配任何at的文本
[root@localhost ~]# sed -n /.at/p data6.sh 
The cat is sleeping. 
That is a very nice hat. 
This test is at line four.
[]匹配字符组,
[root@localhost ~]# sed -n /[ch]at/p data6.sh 
The cat is sleeping. 
That is a very nice hat. 
chat 
可以在单个表达式中用多个字符组。
$ echo "Yes" | sed -n /[Yy][Ee][Ss]/p 
Yes 
$ echo "yEs" | sed -n /[Yy][Ee][Ss]/p 
yEs 
$ echo "yeS" | sed -n /[Yy][Ee][Ss]/p 
yeS 
$

匹配数字
$ cat data7 
This line doesnt contain a number. 
This line has 1 number on it. 
This line a number 2 on it. 
This line has a number 4 on it. 
$ sed -n /[0123]/p data7 
This line has 1 number on it. 
This line a number 2 on it.

$ cat data8 
60633
46201 
223001 
4353 
22203
$ sed -n  
>/[0123456789][0123456789][0123456789][0123456789][0123456789]/p 
> data8 
60633 
46201 
223001 
22203
成功过滤掉了不可能是邮编的那些过短的数字,因为最后一个字符组
没有字符可匹配。但它也通过了那个六位数,尽管我们只定义了5个字符组

如果要确保只匹配五位数,就必须将匹配的字符和其他字符分开,要么用空格,要么指明行首和行尾
$ sed -n  
> /^
[0123456789][0123456789][0123456789][0123456789][0123456789]$/p 
>  data8 
60633 
46201 
22203
排除型字符组,匹配组中没有的字符
$ sed -n /[^
ch]at/p data6 
This test is at line four.

 

区间匹配 -只需要指定区间的第一个字符、单破折线以及区间的最后一个字符就行了。正则表达式会包括此区间内的任意字符
[root@localhost ~]# cat data8.txt 
60633
46201 
223001 
4353 
22203

[root@localhost ~]# sed -n /^[0-9][0-9][0-9][0-9][0-9]$/p data8.txt 
60633
22203
 如果字母出现在数据中的任何位置,这个模式都将不成立
echo "a123" | sed -n /^[0-9][0-9][0-9][0-9]$/p

匹配字母
[root@localhost ~]# cat data6.sh 
The cat is sleeping. 
That is a very nice hat. 
This test is at line four. 
at at ten oclock well go home.
chat 

[c-h]at匹配了首字母在字母c和字母h之间的单词。这种情况下,只含有单词at的行将无法匹配该模式。
[root@localhost ~]# sed -n /[a-ch-m]at/p data6.sh 
The cat is sleeping. 
That is a very nice hat. 
chat 
该字符组允许区间a~c、h~m中的字母出现在at文本前,但不允许出现d~g的字母。


该模式不匹配fat文本,因为它没在指定的区间。
$ echo "I‘m getting too fat." | sed -n /[a-ch-m]at/p

 

正则表达式

原文:https://www.cnblogs.com/YingLai/p/12145431.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!