加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式初步

发布时间:2020-12-13 23:10:15 所属栏目:百科 来源:网络整理
导读:正则表达式:描述具有某种特征的字符串的表达式。 正则表达式由普通字符与特殊字符(元字符)组成。 基本元字符集 ^ 在每行的开始进行匹配 $ 在每行的末尾进行匹配 在单词的开始进行匹配 在单词的末尾进行匹配 . 对单个字符进行匹配 [str] 对str中的任意

正则表达式:描述具有某种特征的字符串的表达式。

正则表达式由普通字符与特殊字符(元字符)组成。

基本元字符集

^ 在每行的开始进行匹配
$ 在每行的末尾进行匹配
&; 在单词的开始进行匹配
&; 在单词的末尾进行匹配
. 对单个字符进行匹配
[str] 对str中的任意单个字符进行匹配
[^str] 对任意不在str中的单个字符进行匹配
[a-b] 对a到b之间的任何字符进行匹配
抑止后面的一个字符的特殊含义
* 对前一项(item)进行0次或多次重复匹配


grep命令示例

grep ^public t1.txt

查找t1文件中行首包含public的行。

grep public$ t1.txt

查找t1文件中行尾包含public的行。

grep -n ^$ t1.txt

查找t1文件中的空行。n表示打印的行数。
grep -n ^.$ t1.txt

查找只包含一个字符的行。
grep -n &;public t1.txt

被解析为 grep -n <public t1.txt(无效)
grep -n ‘&;public’ t1.txt

查找单词开头部分出现public的行。加‘’ 抑制shell对特殊字符的解析。
grep -n ‘public&;’ t1.txt

查找单词结尾部分出现public的行。

grep -n 11[MNX] t1.txt

查找包含字符 11M 或 11N 或 11X的行。

grep -n 11[^MNX] t1.txt

查找包含字符 11 且不包含字符11M 或 11N 或 11X的行 。

grep -n “” t1.txt

查找不到。关于“”只能抑制shell对部分字符的解析(如() []),不能抑制 。所以shell接收,解析成 ,会把传给grep.

grep -n “\” t1.txt

查找包含 的行
grep -n ‘’ t1.txt

查找包含 的行

grep -n go*d t1.txt

查找包含g(0到n个o)d的行。如gd,god,good,goood……

grep -ni public t1.txt

查找包含public的行,不区分大小写。



扩展元字符集

+ 对前一项进行1次或多次重复匹配
? 对前一项进行0次或1次重复匹配
{j} 对前一项进行j次重复匹配
{j,} 对前一项进行j次或更多次重复匹配
{,k} 对前一项最多进行k次重复匹配
{j,k} 对前一项进行j到k次重复匹配
s|t 匹配s项或t项中的一项
(exp) 将exp作为单项处理


grep -E go+d t1.txt

查找一个或多个o。-E表示为扩展字符集。(或者egrep -n …效果一样的)

grep -En 10{3}A t1.txt

对0进行3次重复匹配,查找1000A所在的行。

grep -En 10{2,4}A t1.txt

grep -En ‘10{2,4}A‘ t1.txt

grep -En “10{2,4}A” t1.txt

三个效果一样,查找2到4个0的行。 100A, 1000A, 10000A。
grep -En '11A|B' t1.txt

匹配11A或11B的行。 |对shell来说是管道,印制特殊含义。
grep -En net(works)* t1.txt

匹配0个或多个works. 括号内当作一项。


查询多个文件,可以使用通配符*

grep -n test *.txt

查找包含test字符的所有文件的所在行。

grep -ln test *.txt

只列出哪些文件包含test. n不在起作用。如果一个文件多处包含,文件也只匹配一次。

反向匹配 -v

ps aux| grep "ssh" | grep -v "grep"

查找包含ssh的进程,且不包含grep进程。

递归搜索目录中的所有文件:-r

grep -rn telnet/etc

查找etc文件及子目录文件下包含telnet的行。


正则表达式在vi中的使用例子

在当前行中删除从aa到zz的所有字符。
:s/aa.*zz//
在整个文件用and代替所有的&字符。
:1,$s/&/and/
在每一行的行首插入字符串new
:1,$s/^/new/
在第2行到第5行的行尾插入字符串@@
:2,5s/$/@@/g
去掉行首的所有数字字符
:s/^[0-9][0-9]*//

s表示替换。1,$表示整个文件。


稍复杂的例子

foo(10,7,2) 替换为 foo(7,10,2)
foo(x+13,y-2,10) 替换为foo(y-2,x+13,10)
foo( bar(8),x+y+z,5) 替换为foo( x+y+z,bar(8),5) :1,$s/foo(([^,]*),([^,([^)]*))/foo(2,1,3)/g [^,] 除了逗号之外的任何字符 [^,]* 0或者多个非逗号字符 ([^,]*) 将这些非逗号字符标记为1,这样可以在之后的替换模式表达式中引用它 ([^,我们必须找到0或者多个非逗号字符后面跟着一个逗号,并且非逗号字符那部分要标记出来以备后用。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读