博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux文本处理三剑客之grep
阅读量:6296 次
发布时间:2019-06-22

本文共 2925 字,大约阅读时间需要 9 分钟。

grep命令

命令简介

grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来

命令语法

grep [OPTION]... PATTERN [FILE]...

命令选项

--color=auto :  对匹配到的文本着色显示-v :  显示不被pattern匹配到的行-i :  忽略字符大小写-n: 显示匹配的行号-c :  统计匹配的行数-o :  仅显示匹配到的字符串-q :  静默模式,不输出任何信息-A # :  after, 后#行-B # :  before, 前#行-C #: context, 前后各#行-e : 实现多个选项间的逻辑or关系-w : 匹配整个单词-E : 相当于egrep,使用扩展的正则表达式-F : 相当于fgrep,不支持正则表达式,搜索速度快

示例

root@centos7 ~]# grep "root" /etc/passwd

root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[root@centos7 ~]# grep -vc "root" /etc/passwd
29

[root@centos7 ~]# grep -o "root" /etc/passwd
root
root
root
root

[root@centos7 ~]# grep -C 2 "core id" /proc/cpuinfo

physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
--
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1

 

grep与正则表达式

正则表达式(REGEXP)又分为基本正则表达式(BRE)和扩展正则表达式(ERE)

基本正则表达式

1.字符匹配

. 匹配任意单个字符[] 匹配指定范围内的任意单个字符[^] 匹配指定范围外的任意单个字符[:alnum:] 字母和数字[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z[:lower:] 小写字母 [:upper:] 大写字母[:blank:] 空白字符(空格和制表符)[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)[:digit:] 十进制数字 [:xdigit:]十六进制数字[:graph:] 可打印的非空白字符[:print:] 可打印字符[:punct:] 标点符号

2.次数匹配(贪婪模式:尽可能长的匹配)

* 匹配前面的字符任意次,包括0次.* 任意长度的任意字符\? 匹配其前面的字符0或1次\+ 匹配其前面的字符至少1次\{n\} 匹配前面的字符n次\{m,n\} 匹配前面的字符至少m次,至多n次\{,n\} 匹配前面的字符至多n次\{n,\} 匹配前面的字符至少n次

3.位置锚定

^ 行首锚定,用于模式的最左侧$ 行尾锚定,用于模式的最右侧^PATTERN$ 用于模式匹配整行,其中 ^$ 表示空行,^[[:space:]]*$ 表示空白行\< 或 \b 词首锚定,用于单词模式的左侧\> 或 \b 词尾锚定;用于单词模式的右侧\
匹配整个单词

4.分组和后向引用

\(string\) :将string作为一个整体方便后面引用\1 :引用第1个左括号及其对应的右括号所匹配的内容\2 :引用第2个左括号及其对应的右括号所匹配的内容...\n :引用第n个左括号及其对应的右括号所匹配的内容

5.或者

\|,例如a\|b表示a或b,C\|cat表示C或cat, \(C\|c\)at表示Cat或cat

扩展正则表达式

注意grep要使用扩展的正则表达式要加-E选项,或者直接使用egrep

1.字符匹配

跟正则表达式一样

2.次数匹配(贪婪模式:尽可能长的匹配)

* 匹配前面的字符任意次,包括0次 (与基本正则表达式一样)

.* 任意长度的任意字符 (与基本正则表达式一样)
? 匹配其前面的字符0或1次 (跟基本正则表达式相比没有 \)
+ 匹配其前面的字符至少1次 (跟基本正则表达式相比没有 \)
{n} 匹配前面的字符n次 (跟基本正则表达式相比没有 \)
{m,n} 匹配前面的字符至少m次,至多n次 (跟基本正则表达式相比没有 \)
{,n} 匹配前面的字符至多n次 (跟基本正则表达式相比没有 \)
{n,} 匹配前面的字符至少n次 (跟基本正则表达式相比没有 \)

3.位置锚定

跟基本正则表达一样

4.分组和后向引用

(string) :将string作为一个整体方便后面引用     (跟基本正则表达相比没有 \)\1 :引用第1个左括号及其对应的右括号所匹配的内容\2 :引用第2个左括号及其对应的右括号所匹配的内容...\n :引用第n个左括号及其对应的右括号所匹配的内容

5.或者

|(跟基本正则表达式相比没有 \),例如a|b表示a或b,C|cat表示C或cat, (C|c)at表示Cat或cat

示例

1. 取出rhel或centos系统的主版本号

[root@centos7 ~]# grep -o "[0-9]\+" /etc/redhat-release | head -17

2. 取出网卡ens33的ip地址

[root@centos7 ~]# ifconfig ens33 | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" | head -1192.168.249.70

3. 显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行

[root@centos7 ~]# grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg

4. 找出/etc/passwd中的两位或三位数

[root@centos7 ~]# grep -o  '\<[[:digit:]]\{2,3\}\>' /etc/passwd

5 .使用egrep取出/etc/rc.d/init.d/functions中其基名

[root@centos7 ~]# echo /etc/rc.d/init.d/functions | egrep -o '[^/]+/?$'functions

6 .使用取出/etc/rc.d/init.d/functions中其目录名

[root@centos7 ~]# echo /etc/rc.d/init.d/functions | egrep -o  "^.*/"/etc/rc.d/init.d/

 

 

 

 

转载于:https://www.cnblogs.com/dugukeling/p/9395958.html

你可能感兴趣的文章
安装gitblit
查看>>
Android Java虚拟机拦截技术分析
查看>>
第五章 深入理解Magento – Magento资源配置
查看>>
最近喜欢用markdown写笔记,贴个语法说明
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Golang gRPC实践 连载六 内置Trace
查看>>
Erlang error?
查看>>
UITableViewCell中设置动态大小的圆形imageview
查看>>
Linux 配置多个Tomcat
查看>>
django forms 错误处理
查看>>
cacti监控(3)配置cacti
查看>>
Flask restful api与blueprint结合实践
查看>>
Win7旗舰版安装Oracle_11gR1_database
查看>>
linux sed
查看>>
有关rsync的一些语句
查看>>
Mysql密码修改
查看>>
Windows 7加域操作手册下
查看>>
Python Tools for Machine Learning
查看>>
php扩展模块安装-lamp
查看>>