欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell脚本编程(一)正则表达式

程序员文章站 2022-07-10 08:28:36
...

正则表达式

文本查找

grep egrep fgrep


grep:根据模式搜索文本,并将符合模式的文本行显示出来,只显示包含文本内容的行

    -i          忽略大小写
    --color     高亮文本
    -v          反向查找显示没有被模式匹配的行,匹配到的不显示
    -o          只显示被模式匹配的串
 alias grep='grep --color'   #命令取别名
[~]#grep 'openstack' /etc/passwd
openstack:x:2004:2004::/home/openstack:/bin/bash
    *:任意长度的任意字符
    ?:任意单个字符
    []:任意范围之内的任意单个字符
    [^]:任意范围之外的任意单个字符
    [:didit:]数字    
    [:upper:]大写   
    [:punct:]字符标点   
    [:space:]空格   

正则表达式:regular expression ,REGEXP

元字符:
1、基本正则表达式

.       匹配任意单个字符
[root@localhost ~]# grep 'r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
*        匹配其前面的字符任意次
[root@localhost ~]# grep 'r.*t' /etc/passwd  (匹配字符串r开头、t结尾)
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
\?      匹配其前面的字符1次或者0次
\{m,n\}  匹配其前面的字符,至少m次 至多n次
[root@localhost ~]# grep 'ro\{0,1\}t' /etc/passwd
abrt:x:173:173::/etc/abrt:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin

位置锚定:

^       锚定行首,此字符后的任意内容必须出现那在行首
[root@localhost ~]# grep '^r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
$        锚定行尾,次字符前的任意内容必须出现在行尾
[root@localhost ~]# grep 'bash$' /etc/passwd
root:x:0:0:root:/root:/bin/bash
black:x:1000:1000:black:/home/black:/bin/bash
black1:x:1008:1008::/home/kingdee:/bin/bash
^$       空白行
\<\b   锚定词首,其后面的任意字符必须作为单词的首部出现
\>\b   锚定词尾,其前面的任意字符必须作为单词的尾部出现
\<root\>\broot\b   锁定单词,root作为一个完整的单词出现
\(\)    分组,匹配括号内的字符串任意次数
[root@localhost ~]# grep '\(ab\)*' test.txt
a
b
ab
abab
aab
aabb
abababa
abbababbab
\1                  调用第一个左括号以及与之对应的右括号所包括的内容
\2      类似
\3

REGEXP:REGular EXPression


Pattern:模式

正则表达式:
Basic REGEXP 基本
Extended REGEXP 扩展
基本正则表达式:
。 任意单个字符
[] 任意范围内字符
[^] 任意范围外的字符

次数匹配;
*匹配其前面任意单个字符
\?匹配其前字符0或1次
{m,n}匹配其前字符至少m次,至多n次,n省略则无上限,m=0则无下限
.*任意长度任意字符

grep 使用基本正则表达式定义的模式来过滤文本的命令

    -i          忽略大小写
    -v          反向搜索(搜索的不显示)
    -o          只显示搜索到的字符串
    --color     高亮匹配的字符
    -E          使用扩展的正则表达式
    -A  n       显示被匹配到的行以及其后面的n行
    -B  n       显示被匹配到的行以及其前面的两行
    -C  n       前后各n行

扩展正则表达式:
字符匹配:
. [] [^]

次数匹配:
*
?
+其前面的字符至少一次
{m,n}

位置锚定:
^ $ \< >
分组:
() \1 \2
或者:
| :or 左右完整字符串匹配

grep –E = egrep

fgrep fast grep 不支持正则表达式(不支持元字符)