linux入門小知識,你在裏面總會有發現

一 、 grep及egrep的基本介紹:linux

首先咱們要知道grep的這個命令的自己意思即:git

  grep [Global search REgular expression and Print out the line ]  全局搜索正則表達式匹配到的內容,而且打印出匹配內容所在行正則表達式


     grep 是一個很經常使用可是也很強大的搜索工具,它是以正則表達式爲基礎,搜索文本文件中符合要求的字符串,而且顯示所匹配的字符串所在行。express

grep搜索的內容是以一行來顯示的,固然咱們可使用一些特別的選項來只顯示咱們所匹配到的內容,這個稍後會爲你講解到,grep通常會與(|)管道apache

像結合使用,grep+基本正則表達式+管道 則是咱們在實際操做中用到最多的組合。bash


2、  grep 命令的使用方法app

使用語法格式: ide

       grep [OPTIONS] PATTERN [FILE...]工具

        -c:只輸出匹配行的計數。ui

-i:不區分大 小寫(只適用於單字符)。

-h:查詢多文件時不顯示文件名。

        -e: 即egrep,配合擴展正則表達式使用和grep一樣的用法

-l:查詢多文件時只輸出包含匹配字符的文件名。

-n:顯示匹配行及 行號。

-s:不顯示不存在或無匹配文本的錯誤信息。

-v:反向選取,顯示不包含匹配文本的全部行

-o:僅顯示匹配的字串,而非字串所在的行

 -A +#:顯示匹配行後#行

 -B +#:顯示匹配行前#行

 -C +#:顯示匹配行先後各#行


     egrep = grep -e 用法與grep相同,配合擴展正則表達式使用,打印出匹配到的字符串。咱們前面一直在說grep或egrep 配合正則表達式使用,那麼什麼是正則表達式呢?下面爲你介紹,linux入門很重要的知識,正則表達式


3、正則表示 RE[Regular Expression]


 正則表示基礎概念

是一類字符所書寫的模式,使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。其中許多字符不表示其字面意義,而是表達控制或通配等功能,簡明的說,正則表達式就是使用一些字符組合成的規則,來配合搜索命令讓用戶方便快捷的完成目的。


正則表示分 基礎正則表達式 與 擴展正則表達式 兩種類型。


一)基本正則表達式:

基本正則表達式一般使用的元字符以下:

一、 字符匹配

        . :    表示任意單個字符

        []:     匹配指定範圍內的任意單個字符 



           [0-9]     匹配0-9內的任意單個數字同[[:digit:]]

              [a-z]匹配a-z內的任意單個字母同[[:lower:]]

      [A-Z]與[a-z]相似   同[[:upper:]]

[[:space:]]     匹配空格

        [[:digit:]]匹配任意單個數字

[[:lower:]]匹配任意單個小寫字母

[[:upper:]]匹配任意單個大寫字母

[[:punct:]]匹配任意單個字符

[[:alpha:]]匹配任意單個字母

[[:alnum:]]匹配任意單個字母或數字

 二、 次數匹配元字符,用於指定其前面的字符出現的次數


* : 表示任意長度,他前面的字符能夠出現任意次

 \? : 表示0次或1次,它前面的字符無關緊要

例如:x\?y 有如下可能:

    y 或者 xy

\{m\}: m次,它前的字符要出現m次

  例如:x\{2\}y 

可能爲: xy, xxy, y, xxxxy, xyy

      \{m,n\}: 至少m次,至多n次

          例如:x\{2,5\}y

        可能爲: xy, y, xxy

        \{m,\}:至少m次

       \{0,n\}: 至多n次

                    .*:任意長度的任意字符


 例如:顯示/boot/grub/grub.conf中以致少一個空白字符開頭的行;

[root@localhost ~]# grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf

root (hd0,0)

kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/vg0-root rd_NO_LUKS rd_NO_DM LANG=en_US.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0/root  KEYBOARDTYPE=pc KEYTABLE=us rhgb crashkernel=auto quiet rhgb quiet

initrd /initramfs-2.6.32-431.el6.x86_64.img

三、 位置錨定元字符,用於指定匹配字符所在行的具體位置


            ^: 行首錨定;

後跟的字符出如今行首

    例如:搜索/etc/passwd 文件內以a開頭的行

[root@localhost ~]# grep --color=auto "^a" /etc/passwd

adm:x:3:4:adm:/var/adm:/sbin/nologin

avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin

        abrt:x:173:173::/etc/abrt:/sbin/nologin

apache:x:48:48:Apache:/var/www:/sbin/nologin

            $: 行尾錨定:

        後跟的字符出如今行尾

    例如: 搜索/etc/passwd 文件內以bash結尾的行(因爲內容太多,我只列出幾行作示例)

[root@localhost ~]#grep "\bbash\b$" /etc/passwd

x1:x:3320:3320::/home/x1:/bin/bash

x2:x:3321:3321::/home/x2:/bin/bash

mmm1:x:3322:3322::/home/mmm1:/bin/bash

mmm2:x:3323:3323::/home/mmm2:/bin/bash

不包含特殊字符的連續字符組成的串叫單詞:

\<或\b: 詞首,出現於單詞左側,

>或\b: 詞尾,出現於單詞右側

 ^$: 表示空白行


四、分組和引用

分組:

\(\):把小括號內的內容當作單個字符來使用

引用:

\#: 引用第n個括號所匹配到的內容,而非模式自己。

例如: \(xyz\).*\1 = xyz.*xyz


二) 擴展正則表達式

擴展正則表達式主要是指 egrep fgrep 及幾個相關的特殊元字符


特殊元字符

+  表示它前面的字符至少出現一次。

?  表示0個或1一個字符,與基本正則表達式裏的\?不一樣,請注意

|  用或的方式選擇|兩邊的字符。

        ()  用戶組字符串,就是把元字符內的看作是一個組一個總體。


4、舉2個grep + 正則表達式的結合使用示例:


(1)顯示當前系統上root、fedora或user1用戶的信息;

[root@localhost ~]#egrep "^(root|fedora|user1):" /etc/passwd 

root:x:0:0:root:/root:/bin/bash

    本例題,用到行首錨定^和擴展正則表達式中的"|",因此要用egrep,因爲個人系統上每添加fedora和user1用戶,故只顯示root的信息。


(2)使用echo命令輸出一個路徑,然後使用grep取出其基名

[root@localhost ~]#echo "/etc/passwd/" | grep -o -E "[[:alnum:]]+/?$"

passwd/

    這個例題中,用到了grep ,管道,以及擴展正則表達式,能夠說是之後最經常使用到的模式,來處理教複雜點的問題,同時也用到了正則表達式的各類元字符。

相關文章
相關標籤/搜索