Linux egrep扩展正则表达式

egrep :   和 grep  部分功能类似

支持扩展的正则表达式实现类似于grep文本过滤功能:grep -E

egrep [OPTIONS] PATTERN [FILE…]

选项:-G:支持基本正则表达式

扩展正则表达式的 元字符:

字符匹配:

  • .   :匹配任意单个字符

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

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

 

次数匹配:

  • * : 任意次,0,1,或多次

  • ? : 0或1次,期前的字符是可有可无的

  • +: 其前字符至少1次

  • {m} :其前的字符m次

  • {m,n} :匹配其前面字符至少m次,至多n次

  • {0,n} :匹配其前面字符至多n次

  • {m,} :匹配其前面字符至少m次

位置锚定:

  •     ^ : 行首锚定,用于模式的最左则;

  •     $ : 行尾锚定,用于模式的最右则;

  •     \<或\b :词首锚定,用于单词模式的左侧

  •     \>或 \b :词尾锚定,用于单词模式的右侧

分组及引用:

(): 分组:括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中

后向引用: \1 ,\2 ,\3 ….

或:

  • a|b  :a或者b

  • C|cat  :C或者cat

  • (c|C)at  :cat或者Cat

 

找出/etc/passwd文件中的两位数或三位数

egrep “\<[0-9]{2,3}\>” /etc/passwd 或者 grep -E “\<[0-9]{2,3}\>” /etc/passwd

练习:

1.找出/proc/meminfo 文件中,所有以大写或小写S开头的行,至少有三种实现方式

grep -i “^s” /proc/meminfo

grep “^[sS]” /proc/meminfo

egrep “^(s|S)” /proc/meminfo

2.显示当前系统上 root,cent用户的相关信息

egrep “^(root|cent)\>” /etc/passwd

3.找出 /etc/rc.d/init.d/functions文件中某单词后面跟一个小括号的行

egrep -o “[_[:alnum:]]+\(\)” /etc/rc.d/init.d/functions

4.使用echo命令输出一绝对路径,使用egrep取出基名

echo /etc/sysconfig/ | egrep -o “[^/]+/?$”

5.找出ifconfig命令结果中的1-255之间的数值

ifconfig | egrep -o “\<[1-9][1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]/>”

 

fgrep :不支持正则表达式元字符:

当无需用到元字符去编写模式时,用fgrep性能更好

 

文本查看及处理工具: wc,cut,sort,uniq,diff,,path

wc:  word count  :单词统计

  • -l: lines

  • -w:words

  • -c:bytes

 

cut :

  • -d CHAR:以指定得字符为分隔符

  • -f fields:挑选出的字段

    #     : 指定的单个字段

    #-#   :连续的多个字段

    #,#   :离散的多个字段

 

sort:排序算法

  • -t CHAR :指定分隔符

  • -n :基于数值大小来排序

  • -k # :用于排序比较的字段

  • -r :逆序排序

  • -f :忽略字符大小写

  • -u : 重复的行只保留一份(连续且相同的行)

 

uniq命令:报告或移除重复的行

  • -c:显示每行的重复次数

  • -u:仅显示未曾重复过的行

  • -d:仅显示重复过的行

 

diff :逐行比较文件的内容

diff OLDFILE NEWFILE >PATHFILE

-u :使用unfied机制,既显示要修改的行的上下文,默认三行

path:向文件打补丁

path -i PATHFILE OLDFILE

path OLDFILE <PATHFILE