文本查找的需要:    

    grep:global research,根据模式,搜索文本,并将符合模式的文本行显示出来。

    egrep,fgrep

    pattern:模式英文,文本字符和正则表达式的元字符组合而成匹配条件。

    grep [optians] [pattern] file...

    -i --ignore-case 忽略大小写

    --color 

    -v 反向查找 被模式匹配的行不显示

    -o 只显示被模式匹配到的字符串

* :任意长度的任意字符

?:任意单个字符

[]:指定范围内的

[^]:指定范围外的


正则表达式:Regular EXPression,REGEXP

grep 'pattern' file

元字符:    

.:匹配任意单个字符;

[]:匹配指定范围的任意单个字符

[^]:匹配指定范围外的单个字符

[:lower:],[:upper:],[:punct:],[:space:],[:alpha:],[:alnum:],[:digit:]

匹配次数:

*:匹配其前面的字符任意次

a, b ,ab, aab,acb,adb,amnb

a*b

a.*b

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

\?:做次数匹配,匹配其前面的字符一次或零次

正常工作在贪婪模式下,尽可能长的去匹配

\{m,n\}:匹配其前字符至少M次,至多N次

    \{1,\}至少一次

    \{0,3\} 最多三次

    grep 'a\{1,3\}b a

位置锚定:

^:锚定行首,此字符后面的任意内容必须出现在行首。

    grep '^r..t' /etc/passwd

$:锚定行尾,此字符前面的任意内容必须出现在行尾

    grep 'y$' /etc/inittab

    grep 'b..h$' /etc/passwd

^$:空白行

锚定词首:

\<: 其后面的任意字符必须作为单词,首部出现,锚定词首

\>:其前面的任意字符必须作为单词,尾部出现,锚定词尾

\<root\>

\broot\b =\<root\> ,可以使用b代替<,>

分组:

\(\)

    \(ab\)* ab可以出现0次,1次,任意次

    grep '\(l..e\).*\(l..e\)' a 匹配以l..e的,并且中间是任意字符

    

    \1:引用第一个左括号以及与之对应的右括号所包括的所有内容

    \2:

    \3:

    grep '\([0-9]\).*\1$ /etc/inittab 行中出现数字并且以相同数字结尾的

    grep '\(^[0-9]\).*\1$ /etc/passwd 以首先开关的数字并且以相同数字结尾的

练习:分析/etc/inittab文件中如下文件中前两行的特征(每一行中出现数字必须相同),请写出可以精确找到类似两行的模式:

    

11:1:wait:/etc/rc.d/rc 1

13:3:wait:/etc/rc.d/rc 3


grep '^1\([0-9]\).\1.*\1$' 

正则表达式:

    Basic REGEXP:基本

    Extended REGEXP:扩展

基本正则表达式:

.:任意单个字符

[]:指定范围

[^]:指定范围以外的

次数匹配:

*:其前的任意次

\?:0次或者1次

\{m,n\)}:至少M次,到多N次

.*:任意长度的字符

锚定:

^:行首

$:行尾

\<,\b:后面的任意单词,必须出现在首部

\>,\b:前面的任意单词,必须出现在尾部

\(\)用于分组的

\1,\2,\3.....用于后向引用

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

    -i

    -v 反向搜索,不匹配的显示

    -o 只显示匹配到的字符串

    --color

    -E :使用扩展正则表达式

    -A#(数值):当某一行被grep指定的模式匹配后,

    grep -A 2 '^core id' /proc/cpuinfo 后面的2行

    -B:

    grep -B 2 '^core id' /proc/cpuinfo 前面2行

    -C:-C2 前后各2行

扩展正则表达式:   

字符匹配:与基本一样

.

[]

[^]

次数匹配

*:与基本一样

?:其前一次或零次

+:其前字符至少一次,匹配其前面字符至少1次

+*近似*

{m,n},不需要使用\,直接使用

位置锚定与基本一样

分组:    

():分组

\1,\2,\3,....

|:或者:a|b or的意思

grep --color -E c|cat a.txt

egrep '\b([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-9]\b'

ifconfig | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'

ifconfig | grep -o '\b[0-9]\{1,3\}\b\.\b[0-9]\{1,3\}\b\.\b[0-9]\{1,3\}\b\.\b[0-9]\{1,3\}\b'

    -o 匹配串本身

ifconfig eth0 | grep -o '\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}'

ifconfig ens160 | sed -nr 's/inet (.*) net.*/\1/p'

ifconfig ens160 | grep -Po '(?<=inet)(.*)(?=net)'


cat /etc/inittab  | grep '^#$' | wc -l

cat /etc/inittab | grep '^#$' 

IPV4:

    5类:A B C D E

A:1-127

B:128-191

C:192:223

fgrep:fast,不支持正则表达式