grep, egrep, fgrep(不支持正则表达式搜索) grep: Global search REgular expression and Print out the line 作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检 查;打印匹配到的行 模式:由正则表达式字符及文本字符所编写的过滤条件 grep [OPTIONS] PATTERN [FILE…]
grep root /etc/passwd grep "$USER" /etc/passwd grep '$USER' /etc/passwd grep `whoami` /etc/passwdREGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式, 其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能 程序支持:grep,sed,awk,vim, less,nginx,varnish等 分两类: 基本正则表达式:BRE 扩展正则表达式:ERE grep -E相当于egrep 正则表达式引擎: 采用不同算法,检查处理正则表达式的软件模块 PCRE(Perl Compatible Regular Expressions) 元字符分类:字符匹配、匹配次数、位置锚定、分组
字符匹配:
一个[ ]表示所有 两个[[ ]]表示一个 如:[[:lower:]]* 表示小写字母出现任意次
. 匹配任意单个字符 [] 匹配指定范围内的任意单个字符,示例:[wang] [0-9] [a-z] [a-zA-Z] [^] 匹配指定范围外的任意单个字符 [:alnum:] 字母和数字 [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z [:lower:] 小写字母 [:upper:] 大写字母 [:blank:] 空白字符(空格和制表符) [:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广) [:cntrl:] 不可打印的控制字符(退格、删除、警铃...) [:digit:] 十进制数字 [:xdigit:]十六进制数字 [:graph:] 可打印的非空白字符 [:print:] 可打印字符 [:punct:] 标点符号用在要指定次数的字符后面,用于指定前面的字符要出现的次数 * 匹配前面的字符任意次,包括0次 贪婪模式:尽可能长的匹配 .* 任意长度的任意字符 \? 匹配其前面的字符0或1次 \+ 匹配其前面的字符至少1次 \{n\} 匹配前面的字符n次 \{m,n\} 匹配前面的字符至少m次,至多n次 \{,n\} 匹配前面的字符至多n次 \{n,\} 匹配前面的字符至少n次
定位出现的位置 ^ 行首锚定,用于模式的最左侧 $ 行尾锚定,用于模式的最右侧 ^PATTERN$ 用于模式匹配整行 ^$ 空行 ^[[:space:]]*$ 空白行 \< 或 \b 词首锚定,用于单词模式的左侧 \> 或 \b 词尾锚定,用于单词模式的右侧 \<PATTERN\> 匹配整个单词
\(\) 将一个或多个字符捆绑在一起,当作一个整体处理,如:(root)+ 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些 变量的命名方式为: \1, \2, \3, … \1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符 示例: (string1(string2)) \1 :string1(string2) \2 :string2 后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
或者:\|
a\|b a或b C\|cat C或cat \(C\|c\)at Cat或cat1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
grep "^\(S\|s\)" /proc/meminfo grep -E "^(S|s)".* /proc/meminfo2、显示/etc/passwd文件中不以/bin/bash结尾的行
grep -v ".*:/bin/bash$" /etc/passwd3、显示用户rpc默认的shell程序
grep ^rpc:.* /etc/passwd|cut -d: -f74、找出/etc/passwd中的两位或三位数
grep -o "[0-9]\{2,3\}" /etc/passwd5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行
grep "^[[:space:]]\+.*" /etc/grub2.cfg6、找出“netstat -tan”命令结果中以LISTEN后跟任意多个空白字符结尾的行
netstat -tan|grep ".*LISTEN[[:space:]]\+"7、显示CentOS7上所有UID小于1000以内的用户名和UID
getent passwd|cut -d: -f1,3|grep -v ".*:[0-9]\{4,\}"8、添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找 出/etc/passwd用户名和shell同名的行
\1$后向引用前面的(加词首锚定)9、利用df和grep,取出磁盘各分区利用率,并从大到小排序 1、显示三个用户root、mage、wang的UID和默认shell
2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
3、使用egrep取出/etc/rc.d/init.d/functions中其基名 4、使用egrep取出上面路径的目录名
5、统计last命令中以root登录的每个主机IP地址登录次数
6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255 7、显示ifconfig命令结果中所有IPv4地址 8、将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面