正则练习

前提

LANG=C

alias grep=‘grep —color=auto'

背诵下来

[:alnum:] [:alpha:] [:upper:] [:lower:] [:digit:] 


显示带有 the的行          

        [root@bird ~]# grep -n 'the' regular_express.txt

显示不带 the的行          

        [root@bird ~]# grep -vn 'the' regular_express.txt

显示带有无论大小写 the的行          

        [root@bird ~]# grep -in 'the' regular_express.txt

搜寻 test 或 taste 这两个单字( t?st)     

        [root@bird ~]# grep -n 't[ae]st' regular_express.txt

搜寻带有oo 且前边不是g的          

        [root@bird ~]# grep -n '[^g]oo' regular_express.txt

oo前边不是小写字母的行               

        [root@bird ~]# grep '[^[:lower:]]oo' regular_express.txt

行首有the的行               

        [root@bird ~]# grep -n '^the' regular_express.txt

小写字母开头的行          

        [root@bird ~]# grep -n '^[[:lower:]]' regular_express.txt

不是英文字母开头的行          

        [root@bird ~]# grep -n '^[^[:alpha:]]' regular_express.txt

不要空白行和开头是#的行          

        [root@bird ~]# grep -v '^$' anaconda-ks.cfg | grep -v '^#'

字符串 开头结尾都是g 中间至少包含一个o的 行          

        [root@bird ~]# grep -n 'goo*g' regular_express.txt

字符串 开头结尾都是g 当中的字节可有可无(零个或多个任意字节)          

        [root@bird ~]# grep -n 'g.*g' regular_express.txt

找出两个到五个 o 的连续字串               

        [root@bird ~]# grep -n 'o\{2,5\}' regular_express.txt

字符串 开头是g 接着是至少两个o 然后再接一个g               

        [root@bird ~]# grep -n 'go\{2,5\}g' regular_express.txt

字符串 开头是g 接着是至少两个o               

        [root@bird ~]# grep -n 'go\{2,\}g' regular_express.txt


  • . (小数点):代表『一定有一个任意字节』的意思;

  • * (星星号):代表『重复前一个字节, 0 到无穷多次』的意思,为组合形态

sed工具

-n  :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 
      的数据一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过
      sed 特殊处理的那一行(或者动作)才会被列出来。
-e  :直接在命令列模式上进行 sed 的动作编辑;
-f  :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 
      sed 动作;
-r  :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i  :直接修改读取的文件内容,而不是由萤幕输出。

动作说明:  [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作
         是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』

function 有底下这些咚咚:
a   :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c   :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d   :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i   :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p   :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s   :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配
      正规表示法!例如 1,20s/old/new/g 就是啦!

将 /etc/passwd 的内容列出并且列印行号,同时,

将第 2~5 行删除!          

        [root@bird ~]# nl /etc/passwd | sed '2,5d'

将第 3~最后一行删除                    

    [root@bird ~]# nl /etc/passwd | sed '3,$d'

在第二行后 加上 ‘drink tea'     

    [root@bird ~]# nl /etc/passwd | sed '2a drink tea'

在第二行前 加上 ‘drink tea'          

    [root@bird ~]# nl /etc/passwd | sed '2i drink tea'

在第二之前 添加多行                                        

        [root@bird ~]# nl /etc/passwd | sed '2a drink tea\

        > drink beer?'

将2-5行取代成No2-5 number                     

        [root@bird ~]# nl /etc/passwd | sed '2,5c No2-5 number'

只取出5-7行                                        

        [root@bird ~]# nl /etc/passwd | sed -n '5,7p'

sed ’s/原内容/新内容/g'                      

        [root@bird ~]# ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'

取出只含有MAN的行 并且去掉#注释行和空白行          

        [root@bird ~]# cat /etc/man.config | grep 'MAN' | sed 's/#.*$//g' | sed '/^$/d'

直接修改文件内容         

        [root@bird ~]# sed -i 's/\.$/\!/g' regular_express.txt

延伸正则写法

去除空白行和行首是#的行

        [root@bird ~]# egrep -v '^$|^#' regular_express.txt

一个或以上的o          

        [root@bird ~]# egrep -n 'go+d' regular_express.txt

零个或一个o          

        [root@bird ~]# egrep -n 'go?d' regular_express.txt

        [root@bird ~]# egrep --color=auto 'g(la|oo)d' regular_express.txt

        [root@bird ~]# echo 'AxyzxyzxyzxyzD' | egrep 'A(xyz)+D'


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章