grep正则表达式及扩展表达式
文本查找的需要: 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&; brootb =&;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,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}' ifconfig | grep -o '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,不支持正则表达式 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |