Linux_Shell知多少—常用正则表达式

来源:互联网 发布:spring源码怎么看 编辑:程序博客网 时间:2024/05/01 20:05

正则表达式

正规表示法与文件格式化处理
正规表示法与通配符是完全不一样的东西
通配符(wildcard)代表的是bash操作接口的一个功能
正则表示法则是一种字符串处理的表示方式

grep 的一些进阶选项
[root@www ~]# grep [-A] [-B] '搜寻字符串' filename
选项与参数:
-A :后面可加数字,为 after 的意思,除了列出该行外,后续的n行也列出来
-B :后面可加数字,为 befer 的意思,除了列出该行外,前面的n行也列出
-i :忽略大小写
-n :打印出行号
-v :取反 <== 除了关键字以外的都打印出来
--color=auto :把关键字加深颜色
-E :使用扩展正则表达式进行匹配。grep -E可取代传统的egrep


[:alnum:] 代表英文大小写字符及数字,亦即 0-9, A-Z, a-z     <==>    [a-zA-Z0-9] <==>    [[:alnum:]]
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z                    <==>    [a-zA-Z]        <==>    [[:alpha:]]
[:digit:] 代表数字而已,亦即 0-9                                                <==>    [0-9]                <==>    [[:digit:]]
[:lower:] 代表小写字符,亦即 a-z                                                <==>    [a-z]                <==>    [[:lower:]]
[:upper:] 代表大写字符,亦即 A-Z                                                <==>    [A-Z]                <==>    [[:upper:]]



[root@feed ~/shell]# dmesg | grep -n -A3 -B2 --color=auto 'eth'
[root@www shell]# alias grep='grep --color=auto'  <==设为别名,有利而无害

利用中括号 [] 来搜寻集合字符
test/taste
[root@www shell]# grep -n 't[ae]st' regular_express.txt
[root@www shell]# grep -n '[^g]oo' regular_express.txt
[root@www shell]# grep -n '[^a-z]oo' regular_express.txt
[root@www shell]# grep -n '[^[:lower:]]oo' regular_express.txt  <==等价于上条

行首与行尾字符 ^ $
以t/The开始的行
[root@www shell]# grep -n -i  '^the' regular_express.txt
以小写字母开头
[root@www shell]# grep -n '^[a-z]' regular_express.txt
非字母开头:
[root@www shell]# grep -n '^[^a-zA-Z]' regular_express.txt
以.结尾:
[root@www shell]# grep -n '/.$' regular_express.txt
找出空行:
[root@www shell]# grep -n '^$' regular_express.txt

任意一个字符 . 与重复字符 *
. (小数点):代表『一定有一个任意字符』的意思
* (星星号):代表『重复前一个 0 到无穷多次』的意思,为组合形态

假设我需要找出 g??d 的字符串,亦即共有四个字符, 起头是g而结束是d
[root@www shell]# grep -n 'g..d' regular_express.txt

『o*』代表的是:『拥有空字符或一个o以上的字符』
『oo*』则第一个o肯定必须要存在,第二个o则是可有可无的多个
[root@www shell]# grep -n 'oo*' regular_express.txt

『.*』『就代表零个或多个任意字符』
[root@www shell]# grep -n 'g.*g' regular_express.txt         =正确=
[root@www shell]# grep -n 'g*g' regular_express.txt            =试一试=

找出『任意数字』的行列
[root@www shell]# grep -n '[0-9][0-9]*' regular_express.txt


限定连续 RE 字符范围 {}            <==限定范围的字符 {}
/{n,m/}        连续 n 到 m 个的『前一个 RE 字符』
若为 /{n/} 则是连续 n 个的前一个 RE 字符
若是 /{n,/} 则是连续 n 个以上的前一个 RE 字符
找到两个 o 的字符串
[root@www shell]# grep -n 'o/{2/}' regular_express.txt
找出g后面接2到5个o ,然后再接一个g的字符串
[root@www shell]# grep -n 'go/{2,5/}g' regular_express.txt
找出g后面接2个以上的o
[root@www shell]# grep -n 'go/{2,/}g' regular_express.txt

常用的正则匹配:
搜寻行首为 # 开始的那一行
[root@www shell]# grep  '^#' regular_express.txt
将行尾为 ! 的那一行打印出来
[root@www shell]# grep  '!$' regular_express.txt
搜寻字符串可以是(eve)(eae)(eee)(e e),但不能仅有(ee)亦即e与e中间『一定』仅有一个字符,空格符也是字符
[root@www shell]# grep  'e.e' regular_express.txt
搜寻含有单引号 ' 的那一行
[root@www shell]# grep  /' regular_express.txt
[root@www shell]# grep  "'" regular_express.txt
找出含有(es)(ess)(esss)等等的字符串
注意,因为 * 可以是0个,所以es也是符合带搜寻字符串。另外,因为*为重复『前一个RE字符』的符号,因此,在 * 之前必须要紧接着一个 RE 字符喔!例如任意字符则为 『.*』
[root@www shell]# grep  'ess*' regular_express.txt
搜寻含有 (gl) 或 (gd) 的那一行
[root@www shell]# grep  -n 'g[ld]' regular_express.txt

注:
在通配符当中的 * 代表的是『 0 ~ 无限多个字符』的意思,但是在正则表示法当中, * 则是『重复 0 到无穷多个的前一个 RE 字符』的意思

以 ls -l 配合 grep 找出 /etc/ 底下文件类型为链接文件属性的文件名
[root@www shell]# ls -l /etc/ | grep '^l'
找到含有以 a 为开头的档案,则必须要这样:
[root@www shell]# ls /etc/ | grep '^a.*'


扩展正则:
egrep 的应用
+        :意义:重复『一个或一个以上』的前一个 RE 字符
?        :意义:『零个或一个』的前一个 RE 字符
|        :意义:用或( or )的方式找出数个字符串
()    :意义:找出『群组』字符串
()+    :意义:多个重复群组的判别

搜寻(god)(good)(goood)...等等的字符串
[root@www shell]# egrep -n 'go+d' regular_express.txt
搜寻(gd)(god)这两个字符串
[root@www shell]# egrep -n 'go?d' regular_express.txt
搜寻gd或good这两个字符串
[root@www shell]# egrep -n 'god|good' regular_express.txt
搜寻(glad)或(good)这两个字符串
[root@www shell]# egrep -n 'g(la|oo)d' regular_express.txt
将『AxyzxyzxyzxyzC』用 echo 叫出
[root@www shell]# echo "AxyzxyzxyzxyzC" | egrep 'A(xyz)+C'

格式化打印: printf
[root@www ~]# printf '打印格式' 实际内容
选项与参数:
/a 警告声音输出
/b 退格键(backspace)
/f 清除屏幕 (form feed)
/n 输出新的一行
/r 亦即 Enter 按键
/t 水平的 [tab] 按键
/v 垂直的 [tab] 按键

原创粉丝点击