正则表达式只是字符串的一种描述linux shell grep 正则,只有和支持正则表达式的工具相结合就能进行字符串处理。本文以grep为例来讲解正则表达式。
grep命令
功能:输入文件的每一行中查找字符串。
基本用法:
grep[-acinv][--color=auto][-An][-Bn]'搜救字符串'文件名
参数说明:
-a:将二补码文档以文本形式处理
-i:忽视大小写差别
-n:在行首显示行号
-A:After的意思,显示匹配字符串后n行的数据
-B:before的意思,显示匹配字符串前n行的数据
-v:显示没有匹配行-A:After的意思,显示匹配部份以后n行-B:before的意思,显示匹配部份之前n行
--color:以特定颜色高亮显示匹配关键字
–color选项是个十分好的选项,可以让你清楚的明白匹配了这些字符。最好在自己的.bashrc或则.bash_profile文件中加入:
aliasgrep=grep--color=auto
每次grep搜索过后,手动高亮匹配疗效了。
‘搜寻字符串'是正则表达式,注意为了防止shell的元字符对正则表达式的影响,请用单冒号('')括上去linux shell grep 正则,千万不要用双冒号括上去("”)或则不括上去。
正则表达式分为基本正则表达式和扩充正则表达式。下边分别简单总结一下。
基本正则表达式
正则表达式学习,主要是对正则表达式元数据的学习。正则表达式本身没有哪些深奥的东西,本文仅仅对基本正则表达式的元数据进行一下总结:
扩充正则表达式
grep通常情况下支持基本正则表达式,可以通过参数-E支持扩充正则表达式,另外grep单独提供了一个扩充命令称作egrep拿来支持扩充正则表达式,这条命令和grep-E等价。尽管通常情况下,基本正则表达式就够用了。特殊情况下,复杂的扩充表达式,可以简化字符串的匹配。
扩充正则表达式就是在基本正则表达式的基础上,降低了一些元数据。
Linux下边正则表达式博大精深,上文支持总结了最常用的部份,假如熟练把握的前面部份的正则表达式基本上可以满足日常使用了。
另外Linux好多命令支持正则表达式,例如find,sed,awk等等。请在使用的时侯参照这种命令的指南使用正则表达式。
linuxgrep正则表达式
grep正则表达式元字符集:
^锚定行的开始如:'^grep'匹配所有以grep开头的行。
$锚定行的结束如:'grep
匹配所有以grep结尾的行。
.匹配一个非换行符的字符如:'gr.p'匹配gr后接一个任意字符,之后是p。
*匹配零个或多个原本字符如:'*grep'匹配所有一个或多个空格后紧随grep的行。.*一起用代表任意字符。
[]匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^]匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧随rep的行。
(..)标记匹配字符,如'(love)',love被标记为1。
锚定词组的开始,如:'匹配包含以grep开头的词组的行。
>锚定词组的结束,如'grep>'匹配包含以grep结尾的词组的行。
x{m}重复字符x,m次,如:'0{5}'匹配包含5个o的行。
x{m,}重复字符x,起码m次,如:'o{5,}'匹配起码有5个o的行。
x{m,n}重复字符x,起码m次linux rar,不少于n次,如:'o{5,10}'匹配5--10个o的行。
w匹配文字和数字字符,也就是[A-Za-z0-9]linux 版本,如:'Gw*p'匹配以G后跟零个或多个文字或数字字符,之后是p。
b词组锁定符,如:'bgrepb'只匹配grep。
常用的grep选项有:
-c只输出匹配行的个数。
-i不分辨大小写(只适用于单字符)。
-h查询多文件时不显示文件名。
-l查询多文件时只输出包含匹配字符的文件名。
-n显示匹配行及行号。
-s不显示不存在或无匹配文本的错误信息。
-v显示不包含匹配文本的所有行。
-V显示软件版本信息
使用grep匹配时最好用双冒号造成来,避免被系统误觉得参数或则特殊命令,也可以匹配多个词组。
关于匹配的实例:
grep-c"48"test.txt统计所有以“48”字符开头的行有多少
grep-i"May"test.txt不分辨大小写查找“May”所有的行)
grep-n"48"test.txt显示行号;显示匹配字符“48”的行及行号,相同于nltest.txt|grep48)
grep-v"48"test.txt显示输出没有字符“48”所有的行)
grep"471"test.txt显示输出字符“471”所在的行)
grep"48;"test.txt显示输出以字符“48”开头,并在字符“48”后是一个tab键所在的行
grep"48[34]"test.txt显示输出以字符“48”开头,第三个字符是“3”或是“4”的所有的行)
grep"^[^48]"test.txt显示输出行首不是字符“48”的行)
grep"[Mm]ay"test.txt设置大小写查找:显示输出第一个字符以“M”或“m”开头,以字符“ay”结束的行)
grep"K…D"test.txt显示输出第一个字符是“K”,第二、三、四是任意字符,第五个字符是“D”所在的行)
grep"[A-Z][9]D"test.txt显示输出第一个字符的范围是“A-D”,第二个字符是“9”,第三个字符的是“D”的所有的行
grep"[35]..1998"test.txt显示第一个字符是3或5,第二三个字符是任意,以1998结尾的所有行
grep"4{2,}"test.txt模式出现机率查找:显示输出字符“4”至少重复出现两次的所有行
grep"9{3,}"test.txt模式出现机率查找:显示输出字符“9”至少重复出现三次的所有行
grep"9{2,3}"test.txt模式出现机率查找:显示输出字符“9”重复出现的次数在一定范围内,重复出现2次或3次所有行
grep-n"^$"test.txt显示输出空行的行号
ls-l|grep"^d"假如要查询目录列表中的目录同:ls-d*
ls-l|grep"^d[d]"在一个目录中查询不包含目录的所有文件
ls-l|grpe"^d…..x..x"查询其他用户和用户组成员有可执行权限的目录集合
文章评论