ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
grep命令的功能:从文本文件或管道数据流中筛选匹配的行及数据(一般会配合正则表达式一起使用) 语法: grep 【options】PATTERN FILE options:选项 PATTERN: 匹配模式 FILE: 文件 常用的选项: -v 显示不匹配的行(取反) -i 不区分大小写 -E 使用扩展正则表达式 --color=auto 为grep过滤的匹配字符串添加颜色 -o 只输出匹配到的内容 范例:去除配置文件里面的注释和空行 grep -Ev "^$|#" nginx.conf #<==^$表示过滤空行,是正则表达式的内容。 二)正则表达式 字符匹配: . 匹配单个字符 [] 匹配指定范围内的任意单个字符 [^] 匹配指定范围外的任意单个字符 [[:digit:]] 匹配所有数字 [[:space:]] 匹配所有空白字符 [[:punct:]] 匹配所有的标点符号 [[:alpha:]] 匹配所有的字母 [[:alnum:]] 匹配所有的字母和数字 次数匹配: 在期望匹配到的字符后面提供一个控制符,用于表达匹配其前面的字符指定的次数 * 任意长度(前面字符的任意长度) \? 匹配其前面的字符0次或1次,表示其前面(左侧)字符可有可无 \+ 匹配其前面的字符1次或多次, 表示其前面(左侧)字符至少出现一次 \{m\} 精确匹配M次,表示其前面(左侧)字符精确出现M次 \{m,n\} 至少M次,至多N次,表示其前面(左侧)字符最少出现M次,最多出现N次 位置匹配: ^: 锚定行首,注意^一定要写在最前面 $: 锚定行尾 ,注意^一定要写在最右边 ---^PATTERN$ 锚定整行内容 ^$: 匹配空白行 单词锚定:由非特殊字符组成的连续的字符串 \< 锚定词首, \<PATTERN ,也可以用\bPATTERN \> 锚定词尾 ,\>PATTERN \<PATTERN\> 匹配整个单词 分组 \(\) 分组中的模式,在某次的具体匹配过程中所匹配的字符,可以被记忆下来。保存于内置的变量中使用\1,\2等的内置变量中,因此还可以被引用\1: 引用,模式中自左而右,由第一个左括号以及与之对应的右括号中模式匹配到的内容\2: 引用,模式中自左而右,由第二个左括号以及与之对应的右括号的模式所匹配的内容 扩展正则表达式 1)把基本正则表达式中需要用\转义的,都不需要咯,例如 \{\}---在扩展正则中,可以直接{} \(\)-----在扩展正则中,可以直接( ) 2)新增一个 |,例如 [root@fenfa tmp]# egrep -i --color=auto "yuki|alex" test1.txt yuki ALEX 范例: 1)找出/pro/meminfo文件中,所有以大写或小写s开头的行 [root@fenfa tmp]# cat /proc/meminfo |grep --color=auto -E "^(s|S)" SwapCached: 0 kB SwapTotal: 2097148 kB SwapFree: 2097148 kB Shmem: 188 kB Slab: 150308 kB SReclaimable: 130428 kB SUnreclaim: 19880 kB 2)找出functions中某个单词后面有一个小括号的 [root@fenfa tmp]# cat /etc/rc.d/init.d/functions |grep -Eo "[_[:alnum:]]+\(\)" 3)使用echo命令输出一绝对路径,使用grep取出其基名 [root@fenfa tmp]# echo /etc/sysconfig/network |grep --color=auto -Eo '\<[^/]+/?$' network [root@fenfa tmp]# echo "/mnt/sdc/" |grep -Eo "[^/]+/?$" |cut -d/ -f1 sdc 使用grep取路径名 [root@fenfa tmp]# echo /etc/sysconfig/network-scripts/ifcfg-eth0 |grep --color=auto -Eo '^/.*/' /etc/sysconfig/network-scripts/ 4)找出rc.sysinit文件中,失少一个空白字符开头,且后面跟一个非空白字符的行 [root@fenfa tmp]# cat /etc/rc.d/rc.sysinit |grep "[[:space:]]\+[^[:space:]]" 5) [root@fenfa tmp]# netstat -tan|grep "LISTEN[[:space:]]*$" 6)显示当前系统root,centos用户的默认的shell和uid [root@fenfa tmp]# grep -E "^(root|centos)\>" /etc/passwd|cut -d: -f1,3,7 root:0:/bin/bash centos:1001:/bin/bash