Grep命令的使用方法
在使用linux时,经常需要进行文件查找,找到符合某种条件的某一行,那么就需要用到grep,egrep,fgrep这些强大的命令。grep,egrep,fgrep简介grep:(Global search Regular Expression(RE) and Print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的
·
在使用linux时,经常需要进行文件查找,找到符合某种条件的某一行,那么就需要用到grep,egrep,fgrep这些强大的命令。
grep,egrep,fgrep简介
grep:(Global search Regular Expression(RE) and Print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来,最常用。
egrep:(extend grep)是grep的扩展 ,使用扩展正则表达式来匹配文本。
fgrep:快速grep,只匹配固定字符串而非正则表达式。
一、grep命令介绍
grep命令:
grep [OPTIONS] PATTERN [FILE...]
grep:根据模式搜索文本,并将符合模式的文本显示出来。
使用基本正则表达式定义的模式来过滤文本命令。
PATTERN:文本字符和正则表达式的元字符组合而成匹配条件。
grep -color #对匹配到的文本着色显示
grep -v #显示没有被匹配到的行
grep -i #忽略大小写
grep -n #显示匹配到的行号
grep -c #统计匹配的行数,不显示搜索结果
grep -o #仅显示匹配到的字符串
grep -q #静默(不显示结果)
grep -A #显示搜索行及其向下相邻的n行
grep -B #显示搜索行及其向上相邻的n行
grep -C #显示搜索行及其向上和向下相邻的n行
grep -e #支持多个匹配选项 grep -e ‘root’ -e ‘bin’ /etc/passwd
grep -w #匹配整个单词
grep -E #或egrep支持扩展的正则表达式
grep -F #或fgrep不支持扩展正则表达式
二、正则表达式元字符
字符匹配:
. 匹配任意单个字符
( ) 匹配方括号括起来的正则表达式群
[] 匹配指定范围内的任意单个字符,其中可用连字符'-'指定字符的范围
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字,即0-9,a-b,A-B
[:alpha:] 代表任何英文大小写字符,即 A-Z, a-z
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空白字符(空格键和[Tab]键)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 控制字符
[:digit:] 代表数字,即0-9
[:xdigit:] 代表十六进制的数字类型, 包括0-9,A-F,a-f的数字与字符
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
匹配次数: 用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括0次 (贪婪模式:尽可能长的匹配 )
.* 任意长度的任意字符
\ 通常用于打开或关闭后续字符的特殊含义
| 或者( 匹配'|'符号前或后的正则表达式)
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次
位置锚定:定位出现的位置
^ 锚定行首,用于模式的最左侧 ,此字符后面的任意内容必须出现在行首
$ 锚定行尾,用于模式的最右侧 ,此字符前面的任意内容必须出现在行尾
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 锚定词首,用于单词模式的左侧 ,其后面的任意字符必须最为单词首部出现
\> 或 \b 锚定词尾,用于单词模式的右侧 ,其前面的任意字符必须最为单词的尾部出现
\<PATTERN\> 匹配整个单词
分组
分组:\(\) 将一个或多个字符捆绑在一起,当作一个整体进 行处理,如:\(root\)\+
分组括号中的模式匹配到的内容会被正则表达式引擎记录于 内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
\1 表示引用第一个左括号以及与之对应的右括号所包括的内容
示例:
vi test1.txt
He love his lover.
She like her liker.
He like his lover.
She love her liker.
grep '\(l..e\).*\1' test1.txt
或者:|
示例:
a|b: a或b C|cat: C或cat \(C|c\)at:Cat或cat
三、扩展正则表达式
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]
扩展正则表达式元字符:
字符匹配:
. :任意单个字符
[] :指定范围内的字符
[^]:不在指定范围内的字符
次数匹配:
*:匹配前面字符任意次
?: 0或1次
+: 1次或多次
{m}: 匹配m次
{m,n}: 至少m次,至多n次
位置锚定:
^: 锚定行首
$: 锚定行尾
\<,\b :锚定词首,用于单词模式的左侧 ,其后面的任意字符必须最为单词首部出现\
\>/\b :\b 锚定词尾,用于单词模式的右侧 ,其前面的任意字符必须最为单词的尾部出现
分组:
() 后向引用:\1,\2...
或者: |
a|b: a或b C|cat: C或cat \(C|c\)at:Cat或cat
实例一 正则表达式
1.显示/etc/passwd中的两位或三位数
[root@admin ~]# grep -o '[0-9]\{2,3\}' /etc/passwd
12
10
14
2.显示/etc/passwd中以’r’开头,以’h’结尾的行
[root@admin ~]# grep '^r.*h$' /etc/passwd
root:x:0:0:root:/root:/bin/bash
3.显示/etc/inittable中以一个数字结尾的行
[root@admin ~]# grep '[[:digit:]]$' /etc/inittab
# 5 - X11
4.显示/etc/passwd中root单词
[root@admin ~]# grep '\<root\>' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
5.创建test1.txt文件,
He love his lover.
She like her liker.
He like his lover.
She love her liker.
显示test1.txt中前后单词对照的行(love...love,like...like)
[root@admin ~]# grep '\(l..e\).*\1' test1.txt
He love his lover.
She like her liker.
实例二 扩展正则表达式
1.创建test2.txt文件
cat
Cat
C
China
显示test2.txt中’cat’或’Cat’
[root@admin ~]# egrep '(c|C)at' test.txt
cat
Cat
2.显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行
[root@admin ~]# egrep '^[[:space:]]+' /boot/grub/grub.conf
root (hd0,0)
kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/vg_zhangshibin-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_zhangshibin/lv_root crashkernel=128M LANG=zh_CN.UTF-8 rd_LVM_LV=vg_zhangshibin/lv_swap KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-358.el6.x86_64.img
3.ifconfig查询网络信息后显示ip地址,广播地址,子网掩码
[root@admin~]#ifconfig|egrep'(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'
inet addr:192.168.23.134 Bcast:192.168.23.255 Mask:255.255.255.0
inet addr:192.168.23.137 Bcast:192.168.23.255 Mask:255.255.255.0
inet addr:127.0.0.1 Mask:255.0.0.0
4.找出/etc/rc.d/init.d/functions文件中行首为单词(包括下划线)的行,
[root@admin ~]# cat /etc/rc.d/init.d/functions |egrep '^[[:alpha:]]+_+.*'
fstab_decode_str() {
echo_success() {
echo_failure() { (多出的省略)
更多推荐
已为社区贡献2条内容
所有评论(0)