ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

shell脚本·正则表达式

2022-09-15 13:03:22  阅读:278  来源: 互联网

标签:脚本 字符 shell grep 正则表达式 txt root hello localhost


正则表达式

字符 作用
. 点号 匹配任意一个且只有一个字符
[] 匹配[]集合内的任意一个字符
[^] 匹配不包含^后的任意字符
*星号 重复前一个字符(连续出现)0次或N次
.* 组合符 匹配所有内容
? 匹配其前面的任意单个字符1次或0次
+ 匹配其前面的任意单个字符至少1次
\ 转义字符 让有特殊含义的字符输出自身
{m,n} 匹配其前面的任意单个字符至少m次,至多n次
^ 尖角号 表示匹配以尖角号后面的单词开头的行
$ 美元符 表示匹配以美元符后面的单词结尾的行
^$ 组合符 表示空行
<或\b 锚定词首,其后面的任意单个字符必须作为单词首部出现
>或\b 锚定词尾,其前面的任意单个字符必须作为单词尾部出现

/分组
()
例:(ab)*
//后向引用
\1 //引用第一个左括号以及与之对应的右括号所包括的所有内容
\2 //引用第二个左括号以及与之对应的右括号所包括的所有内容
. 点号 匹配任意一个且只有一个字符

[root@localhost ~]# vim a.txt
[root@localhost ~]# cat a.txt 
abc
acb
accb

zcxdsd
eerd

fbd
cc

vvddx
ddf
[root@localhost ~]# grep . a.txt  //匹配所有字符(不包括空行)
abc
acb
accb
zcxdsd
eerd
fbd
cc
vvddx
ddf
[root@localhost ~]# grep a. a.txt //匹配a和a后一个字符
abc
acb
accb
[root@localhost ~]# grep .c a.txt //匹配c和c前一个字符
abc
acb
accb
zcxdsd
cc

[] 匹配[]集合内的任意一个字符

[root@localhost ~]# grep "[abc]" a.txt 
abc
acb
accb
zcxdsd
fbd
cc
[root@localhost ~]# grep "[zc]" a.txt 
abc
acb
accb
zcxdsd
cc

[^] 匹配不包含^后的任意字符

[root@localhost ~]# grep "[^abc]" a.txt 
zcxdsd
eerd
fbd
vvddx
ddf
[root@localhost ~]# grep "[^zc]" a.txt 
abc
acb
accb
zcxdsd
eerd
fbd
vvddx
ddf

*** 星号 重复前一个字符(连续出现)0次或N次**

[root@localhost ~]# grep "a*" a.txt 
abc
acb
accb

zcxdsd
eerd

fbd
cc

vvddx
ddf
[root@localhost ~]# grep "z*" a.txt 
abc
acb
accb

zcxdsd
eerd

fbd
cc

vvddx
ddf

.* 组合符 匹配所有内容

[root@localhost ~]# grep ".*" a.txt 
abc
acb
accb

zcxdsd
eerd

fbd
cc

vvddx
ddf

** ?匹配其前面的任意单个字符1次或0次**

[root@localhost ~]# grep 'ab\?' a.txt 
abc
acb
accb
[root@localhost ~]# grep 'a\?' a.txt 
abc
acb
accb

zcxdsd
eerd

fbd
cc

vvddx
ddf

+匹配其前面的任意单个字符至少1次

[root@localhost ~]# grep 'a\+' a.txt 
abc
acb
accb
[root@localhost ~]# grep 'ab\+' a.txt 
abc

{m,n} 匹配其前面的任意单个字符至少m次,至多n次

[root@localhost ~]# touch aaa
[root@localhost ~]# touch aaabbb
[root@localhost ~]# touch edddd ddddvvvvccc   aaabbbddd
[root@localhost ~]# ls |grep '^a\{1,\}$'
aaa
[root@localhost ~]# ls |grep '^ed\{1,\}$'
edddd
[root@localhost ~]# touch a ab
[root@localhost ~]# ls | grep '^ab\{0,1\}$'
a
ab
[root@localhost ~]# ls | grep '^ab\{1\}$'
ab
[root@localhost ~]# ls |grep '^ab\{6\}$'
abbbbbb

^ 尖角号 表示匹配以尖角号后面的单词开头的行

[root@localhost ~]# cat a.txt 
abc
acb
accb

zcxdsd
eerd

fbd
cc

vvddx
ddf
[root@localhost ~]# grep ^a a.txt 
abc
acb
accb

$ 美元符 表示匹配以美元符后面的单词结尾的行

[root@localhost ~]# cat a.txt 
abc
acb
accb

zcxdsd
eerd

fbd
cc

vvddx
ddf
root@localhost ~]# grep b$ a.txt 
acb
accb

^$ 组合符 表示空行

[root@localhost ~]# grep "^$" a.txt 


[root@localhost ~]#  grep acb a.txt |grep -v "^$" > /root/my
[root@localhost ~]# cat /root/my 
acb
[root@localhost ~]# vim a
[root@localhost ~]# cat a
hello world

haha
[root@localhost ~]# grep  '^$' a

[root@localhost ~]# grep  -v '^$' a
hello world
haha

<或\b锚定词首,其后面的任意单个字符必须作为单词首部出现
>或\b 锚定词尾,其前面的任意单个字符必须作为单词尾部出现

[root@localhost ~]# vim b
[root@localhost ~]# cat b 
hello world hello xbz hello xbb

haha
[root@localhost ~]# grep 'hello' b
hello world hello xbz hello xbb
[root@localhost ~]# grep '^hello' b
hello world hello xbz hello xbb
[root@localhost ~]# grep '\<hello' b
hello world hello xbz hello xbb
[root@localhost ~]# vim b
[root@localhost ~]# cat b
hello world hello xbz hello xbb
 ddf fffdff dddddf hello
haha
root@localhost ~]# grep '\<hello' b
hello world hello xbz hello xbb
 ddf fffdff dddddf hello
[root@localhost ~]# grep 'hello\>' b
hello world hello xbz hello xbb
 ddf fffdff dddddf hello
[root@localhost ~]# grep 'hello\b' b
hello world hello xbz hello xbb
 ddf fffdff dddddf hello
[root@localhost ~]# grep 'hello\>' b
hello world hello xbz hello xbb
 ddf fffdff dddddf hello

扩展正则表达式

字符匹配

.       //匹配任意单个字符
[]      //匹配指定范围内的任意单个字符
[^]     //匹配指定范围外的任意单个字符

单个字符匹配相关
[[:alpha:]]  表示任意大小写字母。
[[:lower:]]  表示任意小写字母。
[[:upper:]]  表示任意大写字母。
[[:digit:]]  表示0到9之间的任意单个数字(包括0和9)。
[[:alnum:]]  表示任意数字或字母。
[[:space:]]  表示任意空白字符,包括"空格"、"tab键"等。
[[:punct:]]  表示任意标点符号。
[^[:alpha:]]  表示单个非字母字符。
[^[:lower:]]  表示单个非小写字母字符。
[^[:upper:]]  表示单个非大写字母字符。
[^[:digit:]]  表示单个非数字字符。
[^[:alnum:]]  表示单个非数字非字母字符。
[^[:space:]]  表示单个非空白字符。
[^[:punct:]]  表示单个非标点符号字符。
[0-9]与[[:digit:]]等效。
[a-z]与[[:lower:]]等效。
[A-Z]与[[:upper:]]等效。
[a-zA-Z]与[[:alpha:]]等效。
[a-zA-Z0-9]与[[:alnum:]]等效。
[^0-9]与[^[:digit:]]等效。
[^a-z]与[^[:lower:]]等效。
[^A-Z]与[^[:upper:]]等效
[^a-zA-Z]与[^[:alpha:]]等效
[^a-zA-Z0-9]与[^[:alnum:]]等效

次数匹配

*       //匹配其前面的任意单个字符任意次
?       //匹配其前面的任意单个字符1次或0次
+       //匹配其前面的任意单个字符至少1次
{m,n}   //匹配其前面的任意单个字符至少m次,至多n次

位置锚定

^       //锚定行首,此字符后面的任意单个字符必须出现在行首
$       //锚定行尾,此字符前面的任意单个字符必须出现在行尾
^$      //空白行
\<或\b       //锚定词首,其后面的任意单个字符必须作为单词首部出现
\>或\b       //锚定词尾,其前面的任意单个字符必须作为单词尾部出现

分组

()      //分组
\1,\2,\3,....
例:(ab)*
//后向引用
	\1      //引用第一个左括号以及与之对应的右括号所包括的所有内容
	\2      //引用第二个左括号以及与之对应的右括号所包括的所有内容
//或者
	|      //or 默认匹配|的整个左侧或者整个右侧的内容
		   //例:C|cat表示C或者cat,要想表示Cat或者cat则需要使用分组,如(C|c)at

标签:脚本,字符,shell,grep,正则表达式,txt,root,hello,localhost
来源: https://www.cnblogs.com/soap-bubble/p/16696148.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有