我的学习记录--grep , egrep
概念: grep (Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 grep:传统的grep程序,支持基本正则表达式 egrep:扩展的grep程序,支持扩展正则表达式 正则表达式:简单来说就是,用一串自己定义的条件字符串,去匹配检索文档中符合条件的字符。 grep基本格式: grep [OPTIONS] PATTERN [FILE...] 常用选项: -o:只显示被模式匹配到的内容 -i:(ignore case) 搜索时不区分字符大小写 -v:显示不能够被模式匹配到的行 -E:使用扩展正则表达式 -A #:显示被模式匹配到的行以及下#行 -B #:显示被模式匹配到的行以及上#行 -C #:显示被模式匹配到的上下#行 --color[=WHEN],--colour[=WHEN] : 用于设置匹配到的字符,显示高亮颜色否,有三个选项auto ,always ,never 例如: 基本正则表达式元字符: 字符匹配: . :匹配任意单个字符 []:指定范围内的任意单个字符 [^]:指定范围外的任意单个字符 次数匹配:在期望匹配字符后面提供一个控制符,用于表达匹配其前面字符指定的次数 * :任意长度,表示0次,1次或多次; .*:任意长度的任意字符(工作于贪婪模式,尽可能长的进行匹配) ?:匹配其前的字符0次或1次,表示其左侧字符可有可无 +:匹配其前面的字符1次或多次,表示其左侧字符至少出现一次 {m}:精确匹配其左侧字符出现m次 {m,n}:至少m次,至多n次: {0,n}:至多n次 {m,}:至少m次 位置锚定: ^:锚定行首,形如:^PATTERN $:锚定行尾,形如:PATTERN$ ^PATTERN$:用模式来匹配整行 例如: grep "^$" 匹配空白字符的行(有空格的行不能匹配) grep "^[[:space:]]*$" 匹配所有空行(可以有空格) grep "^sh.*sh$" /etc/passwd 匹配/etc/passwd文件中以sh开始,sh结尾的整行 单词锚定:由非特殊字符组成的连续的字符串 &;:锚定词首 也可用b,形如:&;PATTERN bPATTERN 例如:grep "&;sh" /etc/passwd 匹配/etc/passwd文件中以“sh”开头的单词 &;:锚定词尾,也可以用b,形如:PATTERN&; PATTERNb &;PATTERN&;:匹配PATTERN能匹配的整个单词 分组匹配: (PATTERN) 注意:分组中的模式,在某次的具体匹配过程中所匹配到的字符,可以被grep记忆(保存于内置的变量中,这些变量时1,2,...),因此,还可以被引用 1:引用,模式中左到右,由第一个左括号以及与之对应的右括号中的模式所匹配到的内容 2:引用,模式自左而右,由第二个左括号以及与之对应的右括号中的模式所匹配到的内容 例如: grep"(a.b).*1" FILE.. 用于匹配文件行中出现了"a.b",且后面再次出现了前方“a.b”匹配到的相同字符串 如图:
amb hello amb 匹配 amb hello anb 不匹配 1匹配的是前面匹配到的内容amb,而非(a.b)模式 扩展的正则表达式元字符:(无特殊说明则用法和基本正则表达式相同) 字符匹配: . :匹配任意单个字符 []:指定范围内的任意单个字符 [^]:指定范围外的任意单个字符 次数匹配: *:任意次 ?:0或1次 +:至少1次 {m}:精确匹配m次 {m,n}:至少m次,至多n次 {m,}:至少m次 {0,n}:至多n次 位置锚定: ^:行首 $:行尾 &;,b:词首 &;,b:词尾 ^$:空白行 分组: (PATTERN):引用1,... 或者:(两侧的所有内容) a|b :a或者b abc|CBA: abc或者CBA egrep(grep -E)命令:(基本和grep一样) grep -E PATTERN FILE... egrep PATTERN FILE... 练习: 1.显示/proc/meminfo文件中以大写或小写S开头的行; # grep -i "^s" /proc/meminfo --color=auto 或; # grep "^[sS]" /proc/meminfo --color=auto 用扩展正则表达式书写: # egrep -i "^s" /proc/meminfo --color=auto
2.显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户 # grep -v "nologin$" /etc/passwd ;-v 显示不被匹配到的行 用扩展正则表达式书写: # grep -E -v "nologin$" /etc/passwd ;-E 表示使用扩展正则表达式 3.找出当前系统上其用户名和默认shell相同的用户的信息 #grep "^(.*)&;.*1$" --color=auto /etc/passwd 用扩展正则表达式书写: #grep "^(.*)&;.*1$" --color=auto /etc/passwd (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |