文本处理三剑客之GREP
文本过滤工具:glob 用于实现bash中的文件名通配
- 通配符:
*:任意长度的任意字符
?:任意单个字符
[ ]:明确指明匹配范围内的单个字符- [abc]:abc中的任意一个
- 注:要匹配通配符本身,需要使用%转义
- 常用的字符集合表示法:
- [:alpha:]:任意字母
- [:alnum:]:任意数字和字母
- [:blank:]:任意空白字符
- [:cntrl:]:任意控制字符
- [:digit:]:任意数字
- [:lower:]:任意小写字母
- [:upper:]:任意大写字母
- [:space:]:任意空格
例如:显示/var目录下,以l开头,以小写字母结尾,且中间至少出现一位数字的文件或目录
- ls -d /var/l[[:digit:]][[:lower:]]
grep:全局搜索正则表达式并显示出来(文本过滤工具)
grep:基本正则表达式
egrep:扩展正则表达式
作用:文本搜索,根据用户指定的内容,对目标文件进行逐行匹配检查,打印匹配到的行
- 内容(模式):由正则表达式字符和文本符所编写的过滤条件
- 正则表达式:由一类特殊字符所编写的模式,有些字符不表示字符本身的含义,而表示控制或通配
- 元字符:表示特殊含义的字符
grep的使用方法:
- 格式:grep [选项] 模式 目录或文件
- --color=auth:对匹配到的内容加颜色显示
- -m #:匹配#次后停止
- -n:显示匹配的行行数
- -c:统计匹配到的行的行号
- -v:显示不能匹配到的行
- -i:匹配时忽略字符大小写
- -o:仅显示匹配到的字符
- -q:静默模式
- -A#:显示匹配到的行和后#行
- -B#:显示匹配到的行和前#行
- -C#:显示匹配到的行和前后各#行
- -w:匹配整个单词
- -E:使用扩展正则表达式
- -F:使用fgrep
- -f file:根据模式文件中的内容去匹配
基本正则表达式的元字符:使用引号引起来
- 字符匹配:
.:任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围之外的任意单个字符 - 次数匹配:
:匹配前面的字符任意次数
.:匹配任意长度的任意字符
\?:匹配前面的字符0次或1次,即前面的字符可有可无
\+:匹配前面的字符至少出现一次
\{m\}:匹配前面的字符m次
\{m,n\}:匹配前面的字符m到n次
\{m,\}:匹配前面的字符至少出现m次
\{,m\}:匹配前面的字符至多出现m次 - 位置锚定:
^:匹配的字符出现在行首
$:匹配的字符出现在行尾
^pattern$:用于整行匹配
^$:空行
^[[:space:]]$:空白行
\<或\b:词首锚定,用于单词模式左侧
\>或\b:词尾锚定,用于单词模式的右侧
\<pattern\>:匹配整个单词 - 分组:
\(\):把括号中的内容分组
\(xy\)*ab:匹配ab前面的xy出现任意次数 - 后向引用:引用前面分组括号中的模式所匹配到的内容
- 分组括号中的模式所匹配到的内容,会被正则表达式引擎记录在内部变量中,这些变量被命名为\1,\2,\3……
- -n:把左侧起第n个左括号以及与之匹配的右括号之间的模式所匹配到的字符
- 例:(str1+(str2)*)
\1:str1+(str2)*
\2:str2
- 分组括号中的模式所匹配到的内容,会被正则表达式引擎记录在内部变量中,这些变量被命名为\1,\2,\3……
- 或者:
\|:
- 实例:
a\|b:a或者b
C\|cat:C或者cat
\(C\|c\)at:Cat或者cat
扩展正则表达式:egrep
选项与基本正则表达式相同
egrp的元字符:
- 字符匹配:同grep
- 次数匹配:同grep,但是不需要转义
- 位置锚定:同grep
- 分组:小括号不需要转义
- 后向引用
- 或者:| 不需要转义
fgrep:不支持正则表达式,仅仅找给定的字符串
练习:
- 显示/proc/meminfo文件中以大小写s开头的行
grep -i ‘^s.‘ /proc/meminfo
grep ‘[Ss].‘ /proc/meminfo - 显示/etc/passwd文件中不以bash结尾的行
grep -v ‘.*bash$‘ /etc/passwd
- 显示CentOS7中的/etc/grub2.cfg文件中,至少以一个空白字符开头,且后面有非空白字符的行
grep -E "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg
原文地址:https://blog.51cto.com/13408885/2395329