Linux下grep入门
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下grep入门相关的知识,希望对你有一定的参考价值。
Linux下入门grep用法
1.grep简述及特点
简介:全局搜索正则表达式出来的行并打印 (Global search REgular expression and Print out the line),一种按照特定模式(pattern)的文本过滤工具
模式:pattern,通过有正则表达式(refexp)特殊字符以及文本字符组成的条件来过滤
正则表达式:refexp,有一些bash支持的特殊文本字符来表示特殊含义,如果特殊字符当原本字符匹配需要转义
2.正则表达式分类
基本正则表达式: BRE
扩展正则表达式: ERE
3.grep 命令基础语法
–color 用特定的颜色高亮显示模式中匹配的字符串,一般为红色 | |
---|---|
-v | 显示不被模式PATTERN匹配的行 |
-o | 表示只显示被模式匹配的字符,而不是整个行 |
-q | 静默模式不输出信息 |
-A | # after 显示到匹配到的后 # 行 |
-B | # before 显示到匹配的前 # 行 |
-C | # context 显示匹配的前后各几行 |
-E | 使用扩展正则表达式 |
基本和扩展的功能类似,只是转义方式不同
4.基本正则表达式
1.字符匹配
字符 | 字符说明 |
---|---|
. | 任意单个字符 |
? | 匹配其前单个字符0或1次 |
* | 匹配其前单个字符任意次 |
.* | 匹配任意长度的任意字符 |
[] | 表示匹配[]里的字符集,[ab]及包含a或b的字符 |
[^] | 表示匹配除了[]里的其它任意字符,[^ab]及不包含a或b的字符 |
2.[]里所支持的特殊通配符:
字符 | 说明 |
---|---|
[0-9] | 表示单个0到9的数字 |
[:digit:] | 表示所有数值,同上 |
[a-z] [:lower:] | 表示单个小写字母 |
[A-Z] [:upper:] | 表示单个大写字母 |
[:alpha:] [a-zA-Z] | 表示单个字母 |
[:alnum:] | 表示字母或数字 |
[:space:] | 匹配空格 |
[:punct:] | 表示所有标点符合 |
注意:在使用中,[::]这种格式[::]里带特殊单词的需要再加[]来表示,比如匹配空格则为‘[[:space:]]‘
3.次数匹配
字符 | 说明 |
---|---|
\? | 0次或1次 |
\+ | 匹配其前字符一次以上 |
\{m\} | 匹配其前字符m次 |
\{m,\} | 匹配其前字符至少m次 |
\{m,n\} | 匹配其前字符至少m次,至多n次 |
4.字符锚定
字符 | 说明 |
---|---|
^ | 行首锚定 |
$ | 行尾锚定 |
^$ | 表示空行匹配 |
\< 或 \b | 行首锚定 |
\> 或 \b | 行尾锚定 |
\\> | 锚定匹配PATTERN的作为单词 \ \broot\b\> |
\(\) : | 对()里匹配PATTERN的做分组\1为后项引用前面第一个分组 |
扩展正则
1.用法
grep -E ‘PATTERN‘ [file]
egrep ‘PATTERN‘ [file]
字符匹配和基本相同
锚定和基本用法一样
分组直接使用(),不要用\转义
后项引用 \1 \2 \3
2.次数匹配
字符 | 说明 |
---|---|
* | 匹配前面字符任意次 |
? | 0或1次。>=0 |
+ | 1次以上。>=1 |
{m} | 匹配多少次 |
{m,} | 至少m次 |
{m,n} | 至少m次,至多n次 |
{0,n} | 至多n次 |
示例
1、显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式)
grep -i ‘^s‘ /proc/meminfo grep ‘^[Ss]‘ /proc/meminfo grep -E ‘^(s|S)‘ /proc/meminfo
2、显示/etc/passwd文件中不以/bin/bash结尾的行
grep -v ‘/bin/bash$‘ /etc/passwd
3、显示用户rpc默认的shell程序
grep ‘^\<rpc\>‘ /etc/passwd | cut -d: -f7
4、找出/etc/passwd中的两位或三位数
grep ‘\<[0-9][0-9]\?\>‘ /etc/passwd grep ‘\<[0-9]\{2,3\}\>‘ /etc/passwd
5、显示/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行
grep ‘^[[:space:]]\+.*[^[:space:]]‘ /etc/grub2.cfg
6、找出"netstat -tan"命令的结果中以‘LISTEN‘后跟任意个空白字符结尾的行
netstat -tan ‘.*LISTEN[[:space:]]*$‘
7、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin),而后找出/etc/passwd文件中用户名同shell名的行
grep ‘^\<\(.*\)\>.*/\1$‘ /etc/passwd grep ‘^\<\(.*\)\>.*\<\1\>$‘ /etc/passwd
8、显示当前系统root、mage或wang用户的UID和默认shell
grep -E ‘^(root|mage|wang)\>‘ /etc/passwd |cut -d: -f7
9、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
grep -E -o ‘^\<[[:alnum:]_]+\>\(\)‘ /etc/rc.d/init.d/functins
10、使用egrep取出/etc/rc.d/init.d/functions中其基名
echo "/etc/rc.d/init.d/functions" grep -E -o ‘[^/]+/?$‘
11、使用egrep取出上面路径的目录名
echo "/etc/rc.d/init.d/functions" | grep -E ‘/.*/‘
12、统计以root身份登录的每个远程主机IP地址的登录次数
last | grep -o ‘root\>.*\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]‘ | tr -s ‘ ‘| cut -d‘ ‘ -f3 | uniq -c
13、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255
grep -E ‘\<([0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>‘
14、显示ifconfig命令结果中所有IPv4地址
ifconfig | grep -o ‘\(\([0-9]\|1[0-9]\|1[0-9]{2}\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\([0-9]\|1[0-9]\|1[0-9]{2}\|2[0-4][0-9]\|25[0-5]\)‘
本文出自 “我思故我在” 博客,请务必保留此出处http://sinian.blog.51cto.com/11619325/1954908
以上是关于Linux下grep入门的主要内容,如果未能解决你的问题,请参考以下文章
Linux入门开发: 学习linux三剑客(awksedgrep)(上)