您的位置 首页 linux常用命令

linux正则表达式语法从0到1实战

 

大家好,我是你的好朋友白眉大叔,今天这篇文章主要介绍一下 linux 正则表达式的入门,里边包含:

linux 正则表达式匹配字符串

linux 正则表达式以m开头以d结尾

以及linux 正则表达式匹配数字 等内容。

上篇文章 给大家介绍了  linux tar 打包压缩   , linux find命令   

这些都是基础的知识,感兴趣的可以去参考一下。

BRE(基础正则表达式)只承认的元字符有^  $  .   [   ]   *  其他字符识别为普通字符;\(\)

ERE(扩展正则表达式)则添加了(   )  {   }   ?   +  | 等

只有在用反斜杠"\"进行转义的情况下,字符(   )  {   }才会在BRE被当作元字符处理,而ERE中,任何元符号前面加上反斜杠反而会使其被当作普通字符来处理。

 

一、 什么是正则表达式

首先正则表达式 是为了处理大量的文字 ,文本,字符串,而定义的一套规则。 你就把它当做数学里的一个函数也可以。

通过定义一些 特殊符号的规则, 我们能够快速的过滤,替换,或者找到 我们需要的字符串内容。

你可以想一下,每天互联网上的上网日志,那么多内容,怎么从里边找到我们需要的内容呢?

可以这么简单的理解:

正则表达式就是 为了处理大量的字符串 而定义的一套规则,  它每次处理都是以行为单位, 一次处理一行 。

正则表达式- regular expression (RE)

案例: 1.txt

I am baimeidashu teacher!
I teach linux.
test

I like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com
our site is http:www.baimeidashu.com
my qq num is 593528156

aaaa,
not 572891888887.
^^^^^^^^66$$$$$$$^^^$$
baimeidashubaimeidashubaimeidashu

(1)以 某个字符开头

^这个符号代表 以什么为开头的意思

比如 我想找 以 not 为开头的那一行,怎么找呢?

grep '^not' 1.txt

(2)以某个字符结尾:

$ 这个符号代表 以 某个 字符结尾

比如: 找到以 156结尾的行

[root@baimeidashu /home]#grep '156$' 1.txt

(3)找到空行 ^$

^$ 这2个连在一起代表 过滤文件的空行

[root@baimeidashu /home]#grep '^$' 1.txt

我们可能不明显看出来,教给你个 参数 grep -v 是 取反的意思,

比如我们过滤空行看不出来, 取个反,就是 非空的行都出来。

[root@baimeidashu /home]#grep -v '^$' 1.txt

(4)  任意一个字符 .

点  . 代表过滤任意一个字符, 不会匹配到空行

grep -o : 代表 显示过程 (only  matching )

grep -v : 带表取反

 

-v Invert the sense of matching, to select non-
matching lines. (-v is specified by POSIX.)

 

案例: 查找文件内以 . 结尾的行

[root@baimeidashu /home]#grep '\.$' 1.txt

 

来个面试题:

统计 /etc/paswd 单个字母每个出现了多少次

cat /etc/passwd |tr "[0-9:/x]" " "|grep -o .|sort|uniq -c|sort -rn|head

面试题2:

统计  /etc/passwd 每个单词出现了多少次

cat /etc/passwd | tr "[0-9:/x]" " "| xargs -n1|sort|uniq -c|sort -rn |head

(5) * 代表 前一个字符连续出现了0次或0次以上

单纯使用没有意义。

(6).*  代表 任何符号,包含空行

第二坑 正则的贪婪匹配 .* 所有符号 任何符号 连续出现的字符 有多少匹配多少

[root@baimeidashu /home]#grep '^.*m' 1.txt

(7) [] 中括号

[abc] 相当于是一个符号 每次匹配1个字符 找出包含a或b或c

一次找一个字符

[root@baimeidashu /home]#grep '[a-Z0-9]' 1.txt

第三坑 神奇的[]  在空括号里的符号 大部分没有特殊的含义  写什么找什么

[] [abc] 相当于是一个符号 每次匹配1个字符 找出包含a或b或c

 

一次找一个字符

 

grep '[a-Z,0-9]' 1.txt

测试以.和!和空格结尾

[root@baimeidashu /home]#grep '[.! ]$' 1.txt

括号:

第2部分: 扩展正则

grep -E

或者 egrep '过滤的内容' fiel

+ 前 一个字符连续出现1次或1次以上

[] 与 + 结合使用过滤连续的内容

过滤连续的a-z字母

[root@baimeidashu /home]#egrep '[a-z]+' 1.txt

(1 )| 扩展正则表达式  或者的意思

案例:

/etc/ssh/ssh_config 排除文件中的#和空行

[root@baimeidashu /home]#cat /etc/ssh/ssh_config |egrep -v '^$|^#'

(2) { }

第一种方法 {n,m}前一个字符至少连续出现n次 最多出现m次

[root@baimeidashu /home]#egrep '8{1,3}' 1.txt

第二种方法8{3} 最多显示多少次

(3) ()表示一个整体, 反向引用 / 后向引用

总结:

正则表达式练习题

欢迎来撩 : 汇总all

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章