grep命令:Linux命令grep命令
站长百科 2024-05-10 14:38www.1681989.com生活百科
grep文本搜素工具,根据用户指定的文本模式对目标文件进行逐行搜索,显示能被模式所匹配到的行
包含三个命令grep、egrep(相当于grep -E 扩展的正则表达式)和fgrep(相当于grep -F 只能字符串匹配)
格式
grep [options] PATTEN filename
options
grep -v (--vert-match)反向匹配,显示不能被表达式匹配的行
grep -o (--only-matchg)仅显示被模式匹配到的字串,而非整行,将匹配到的字符串一行一个显示
grep -n 打印行号
grep -q静默模式,不输出任何信息,用于写脚本时的判断,和&>/dev/null一样
grep -c 计算找到匹配项的行数,1行算1次。只显示行数,不显示匹配到的行内容
grep -i 不区分字符大小写
grep -B 数字before显示匹配行,和其上面n行
grep -A 数字after显示匹配行,和其下面n行
grep -C 数字显示匹配行,和上下n行
grep -e 实现多个选项间的逻辑or关系,例如grep -e 'cat' -e 'dog' filename
grep -w 匹配整个词,用空格、特殊符号隔开的都算一个词
grep -f 后面跟文件,文件中写正则表达式,各个表达式相当于或关系
grep -f f1 f2 #两个文件取交集
grep -E 使用egrep
grep -F 使用fgrep
PATTEN正则表达式是一类字符所书写出的模式(pattern)
元字符不表示字符本身的意义,用于额外功能性的描述
基本正则表达式(grep)的元字符
字符匹配
.元字符,代表任意一个字符,包括空格
\.表示.本身,"\"斜杆是逃逸符后面可接, ! ` [ .
[ ]指定范围内的任意单个字符
[^]指定范围外的任意单个字符
[A-Z],[[:upper:]]所有大写字母
[a-z],[[:lower:]]所有小写字母,和通配符匹配文件名有区别
[[:alpha:]]所有字母,大小写
[0-9],[[:digit:]]所有数字
[[:alnum:]]所有数字+字母
[[:blank:]]空白字符(空格和制表符)
[[:space:]]水平和垂直的空白字符(比[:blank:]包含的范围广)
[^[:space:]]非空白字符
[[:graph:]]可打印的非空白字符
[[:prt:]]可打印字符
[[:punct:]]标点符号
[[:trl:]]不可打印的控制字符(退格、删除、警铃)
次数匹配用来指定匹配其前面的字符的次数
任意次
例如xy,xxy,xy,y,指的是x可以出现0,1或者多次
.匹配任意长度的任意字符
\?0次或1次
例如x\?y,xy,y,xxy
贪婪模式尽可能的长的去匹配字符
\+至少1次
\{m\}匹配m次,此处的两个\\是转义字符
\{m,n\}匹配至少M次,至多n次
\{m,\}匹配至少M次
\{0,n\}匹配至多n次
例如x\{2,6\}y匹配xxy,xxxy,xxxxy,xxxxxy,xxxxxxy
位置锚定用于指定字符出现的位置
^锚定行首
$锚定行尾
例如^[[:space:]]\+$ 空白组成的行
\<char锚定词首,\bchar 数字、字母、下划线连起来的都算单词,其他符号都算分隔符
char\>锚定词尾,char\b
例如 \<h..o\>,以h开头,o结尾中间跟任意两个字符的单词
分组
abxy xy,abxy,ababxy
引用
\1后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式的结果字符串
\2
a.bxy\1 a6bxya6b
或者:
\| a\|bcd a或者bcd,整个字符串或者
举例
1、显示/proc/memfo文件中以大小写s开头的行
# grep "^[Ss]" /proc/memfo
# grep -i "^s" /proc/memfo
2、取出默认shell为非bash的用户
# grep -v "bash$" /etc/passwd | cut -d: -f 1
3、取出默认shell为bash的且ID号最大的用户
# grep "bash$" /etc/passwd | sort -t: -k3 -rn|head -1|cut -d: -f1
4、显示/etc/rc.d/rc.sysit文件中,以#开头,后面至少一个空白字符,而后至少一个非空白字符的行
# grep "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.sysit
5、显示/boot/grub/grub.conf中至少一个非空白字符开头的行
# grep "^[^[:space:]]\{1,\}" /boot/grub/grub.conf
6、找出/etc/passwd文件中一位数或两位数
# grep "\<[0-9]\{1,2\}\>" /etc/passwd
7、查看当前系统上root用户的所有信息
# grep "^root\>" /etc/passwd
8、添加用户bash和testbash、basher,而后找出当前系统上其用户名和默认shell相同的用户
# grep "^\([[:alnum:]]\{1,\}\)\>.\1$" /etc/passwd
9、匹配所有非空白行
#grep "." a.txt
10、取目录名
# grep -Eo ".\<"
# grep -Eo ".[^/]" | grep -Eo "./"
11、取基名
# grep -Eo "[^/]+/?$"
12、匹配空行
# grep ^$ file
13、匹配非空行
# grep -v ^$ file 或 grep .\+ file
14、匹配0.0.0.0~255.255.255.255
grep --color=auto -o "\(\<\([0-9]\|[1-9][0-9]\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)\>\.\)\{3\}\<\([0-9]\|[1-9][0-9]\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)\>"
15、匹配实际IP地址1.0.0.0-223.255.255.255
grep --color=auto -o "\<\([1-9]\|[1-9][0-9]\|1[0-9]\{2\}\|2[0-1][0-9]\|22[0-3]\)\>\(\.\<\([0-9]\|[1-9][0-9]\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)\>\)\{3\}"
egrep使用扩展正则表达式来创建模式,相当于 grep -E
元字符
字符匹配
.任意单个字符
[ ]指定范围内的任意单个字符
[^ ]指定范围外的任意单个字符
次数匹配
匹配其前面的字符任意次
?匹配前面的字符0或1次
+匹配前面的字符至少1次
{m}匹配前面的字符m次 区别于普通正则表达式
{m,n}至少m,至多n次
{m,}至少m次
{0,n}至多n次
锚定
^行首
$行尾
\<, \b 词首
\>, \b 词尾
分组
()分组
生活知识
- 李晨范冰冰近期感情状况李晨和范冰冰分手之
- 元旦前如何快速美容护肤护肤小秘方
- 有钱枯燥哥是谁带劳力士两个女人
- 众星现身看网球公开赛 靳东携带娇妻秀恩爱
- 人民的名义郑西坡结局是什么 郑西坡结局死了吗
- 孙浩演的穿越电影叫什么 首次演绎穿越剧爆笑上
- 石像与马龙神撞脸引热议 盘点那些年娱乐圈撞脸
- 邓紫棋晒妈妈照片 一家神基因逆龄高颜值
- 台湾演员藏芮轩年纪多大 曝深V高衩泳装照胸好大
- 连淮伟参加过什么节目 努力奋斗多年还是没出道
- 展元每天3小时玩游戏 曝常善意谎言隐瞒谷怀萱
- 丹尼斯吴最新照片 丹尼斯吴写真
- 高天鹤贾凡什么关系两人是真的闹不合吗
- 非诚勿扰插曲牵手成功的歌曲是哪首 卓文萱与曹
- 声入人心高杨是谁高扬个人资料介绍
- 上原亚衣引退3年爆结婚怀孕 包包上的好孕妈妈别