- 浏览: 72132 次
-
文章分类
最新评论
grep工具
第九章 正则
9.1 正则介绍&grep(上)
正则
>在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。
正则表达式的基础
在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。如:正则表达式"test"中没有包含任何元字符,它可以匹配"test"和"007test007"等字符串,但是不能匹配"Test"。
要想真正的用好正则表达式,需要正确的理解元字符。
元字符
. :匹配任何单个字符。例如正则表达式 r.t 匹配这些字符串:rat、rut、r t,但是不匹配root。
$ :匹配行结束符。例如正则表达式 weasel$ 能够匹配字符串"He's a weasel"的末尾,但是不能匹配字符串"They are a bunch of weasels."。
^ :匹配一行的开始。例如正则表达式 ^When in 能够匹配字符串"When in the course of human events"的开始,但是不能匹配"What and When in the"。
*:匹配0个或多个正好在它之前的那个字符。如,正则表达式 .* 意味着能够匹配任意数量的任何字符(代表所有内容)。
" \ ":脱义符,使这里列出的这些元字符以普通的字符的身份来进行匹配。如,\ . 是匹配点字符,而不是以通配符的身份出现。
[ ]:匹配括号中的任何一个字符。如,正则表达式 r[aeo]d 匹配rad,red,rod。也可以指定区间 [0-9a-zA-Z] ,即代表所有非特殊字符!
\ <,\ >:匹配词(word)的开始(\ <)和结束(\ >)。例如正则表达式 \ < the 能够匹配字符串"for the wise"中的"the",但是不能匹配字符串"otherwise"中的"the"。 注意: 这个元字符不是所有的软件都支持的。
|:将两个匹配条件进行逻辑“或”(Or)运算。 注意: 这个元字符不是所有的软件都支持的。
+:匹配1或多个正好在它之前的那个字符。注意: 这个元字符不是所有的软件都支持的。
?:匹配0或1个正好在它之前的那个字符。注意: 这个元字符不是所有的软件都支持的。
\ {i\ }\ {i,j\ }: 匹配指定数目的字符,这些字符是在它之前的表达式定义的。例如正则表达式A[0-9]\ {3\ } 能够匹配字符"A"后面跟着正好3个数字字符的串,例如A123、A348等,但是不匹配A1234。而正则表达式[0-9]\ {4,6\ } 匹配连续的任意4个、5个或者6个数字字符。注意: 这个元字符不是所有的软件都支持的。
正则表达式的语法支持情况
注: x表示支持。
grep(上)
>grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep,egrep和fgrep的命令都是grep的扩展,支持更多的re元字符,fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
语法: grep [options] ‘Word’ filename
Options:
-c:=count 行数
-i:=ignore-case 不区分大小写
-n:=line-number 显示行号
-v:=revert-match 取反
-r,-R:=recursive(递归的,循环的)读取目录下的所有文件,包括子目录
-A:后面跟数字,过滤出复合要求的行以及下面n行
-B:同上,过滤出符合要求的行以及上面n行 -C:同上,同时过滤出符合要求的行以及上下各n行
-E:‘grep -E’ = egrep
eg:
- 过滤一个字符串
[root@adai003 grep]# grep 'nologin' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@adai003 grep]# which grep
alias grep='grep --color=auto'
/usr/bin/grep
在Linux中,grep默认带color选项:
- grep -c
[root@adai003 grep]# grep -c 'nologin' passwd
4
[root@adai003 grep]# cat !$
cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
- grep -n
[root@adai003 grep]# grep -n 'nologin' passwd
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
- grep -i
[root@adai003 grep]# cat !$
cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/Nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@adai003 grep]# grep 'nologin' passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@adai003 grep]# grep -i 'nologin' passwd
bin:x:1:1:bin:/bin:/sbin/Nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@adai003 grep]# grep -c 'nologin' passwd
3
[root@adai003 grep]# grep -ic 'nologin' passwd
4
- grep -v
[root@adai003 grep]# grep -v 'nologin' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/Nologin
- grep -r/R
[root@adai003 grep]# tree
.
├── grep1
│ └── passwd1
└── passwd
[root@adai003 grep]# grep -r 'root' .
./passwd:root:x:0:0:root:/root:/bin/bash
./grep1/passwd1:root:x:0:0:root:/root:/bin/bash
[root@adai003 grep]# grep -R 'root' .
./passwd:root:x:0:0:root:/root:/bin/bash
./grep1/passwd1:root:x:0:0:root:/root:/bin/bash
- grep -A
[root@adai003 grep]# grep -nA2 'daemon' passwd
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4-adm:x:3:4:adm:/var/adm:/sbin/nologin
5-lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
- grep -B
[root@adai003 grep]# grep -nB2 'daemon' passwd
1-root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/Nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
- grep -C
[root@adai003 grep]# grep -nC2 'daemon' passwd
1-root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/Nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4-adm:x:3:4:adm:/var/adm:/sbin/nologin
5-lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
9.2 grep(中)
grep应用
- eg1:grep -n '[0-9]'
[root@adai003 grep]# grep -n '[0-9]' passwd
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/Nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
5:adm:x:3:4:adm:/var/adm:/sbin/nologin
6:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7:pcp:x:996:994:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
- eg2:grep -nv '[0-9]'
[root@adai003 grep]# cat !$
cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/Nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/c
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
pcp:x:996:994:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
[root@adai003 grep]# grep -nv '[0-9]' passwd
4:Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/c
8:Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
- grep -n ' ^# ' 过滤以#开头的行(^在此表示以某字符开头)
[root@adai003 grep]# cat inittab
# inittab is no longer used when using systemd.
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
lhugalkdoljweriii
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
jlkdghkhladlllsdjfj
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
[root@adai003 grep]# grep -n '^#' inittab
1:# inittab is no longer used when using systemd.
2:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
4:# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
6:# multi-user.target: analogous to runlevel 3
7:# graphical.target: analogous to runlevel 5
[root@adai003 grep]# grep -nv '^#' inittab 过滤不是以#开头的行
3:lhugalkdoljweriii
5:jlkdghkhladlllsdjfj
- grep '[^0-9]' 表示非0-9中任意字符所在的行,即任意非数字所在的行(只要包含非数字字符都算在内,中括号内的‘^’表示否定)
[root@adai003 grep]# cat inittab
# inittab is no longer used when using systemd.
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
lhugalkdoljweriii
23542524
1245a879869
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
6999%&*0927309
# multi-user.target: analogous to runlevel 3
^%^%$&%%*&##
# graphical.target: analogous to runlevel 5
[root@adai003 grep]# grep '[^0-9]' inittab
# inittab is no longer used when using systemd.
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
lhugalkdoljweriii
1245a879869
# systemd uses 'targets' instead of runlevels. By default, there are two main target:
6999%&*0927309
# multi-user.target: analogous to runlevel 3
^%^%$&%%*&##
# graphical.target: analogous to runlevel 5
- grep '^[^0-9]' 表示以非数字字符开头的行
[root@adai003 grep]# grep '^[^0-9]' inittab
# inittab is no longer used when using systemd.
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
lhugalkdoljweriii
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
# multi-user.target: analogous to runlevel 3
^%^%$&%%*&##
# graphical.target: analogous to runlevel 5
- grep 'r.o' 在此‘.’表示一个任意字符
[root@adai003 grep]# grep 'r.o' passwd
root:x:0:0:roprot:/root:/bin/bash
pcp:x:996:994:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
- grep 'o*o' 在此‘ * ’表示其左边的字符重复n此(n≥0)
[root@adai003 grep]# grep 'o*o' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/Nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
Ctrl-Alt-Deoooleooote ios handled by /usr/lib/systemd/system/c
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
pcp:x:996:994:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
- grep '.*' 在此' . * '组合表示所有任意字符
[root@adai003 grep]# grep '.*' passwd
root:x:0:0:roprot:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/Nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
Ctrl-Alt-Deoooleooote ios handled by /usr/lib/systemd/system/c
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
pcp:x:996:994:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
- grep 'o\ {2\ }' 在此{}表示前面字符或字符串出现的次数(也可以是一个区间,如'o\ {0,3\ }'表示0个到3个o)
[root@adai003 grep]# grep -n 'o\{2\}' passwd
1:root:x:0:0:roprot:/root:/bin/bash
4:Ctrl-Alt-Deoooleooote ios handled by /usr/lib/systemd/system/c
6:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@adai003 grep]# grep -n 'o\{3\}' passwd
4:Ctrl-Alt-Deoooleooote ios handled by /usr/lib/systemd/system/c
[root@adai003 grep]# grep -n 'o\{0,3\}' passwd
1:root:x:0:0:roprot:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/Nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:Ctrl-Alt-Deoooleooote ios handled by /usr/lib/systemd/system/c
5:adm:x:3:4:adm:/var/adm:/sbin/nologin
6:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7:pcp:x:996:994:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
8:Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
9.3 grep(下)
egrep应用
- egrep 'o{2}'=grep -E 'o {2}' = grep 'o\ {2\ }'
[root@adai003 grep]# grep -nE 'o{2}' passwd
1:root:x:0:0:roprot:/root:/bin/bash
4:Ctrl-Alt-Deoooleooote ios handled by /usr/lib/systemd/system/c
6:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@adai003 grep]# egrep -n 'o{2}' passwd
1:root:x:0:0:roprot:/root:/bin/bash
4:Ctrl-Alt-Deoooleooote ios handled by /usr/lib/systemd/system/c
6:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
当{}前面是一个字符串时需要使用‘()’
- egrep -n 'o+o' 在此‘+’表示其左边的字符重复n此(n≥1,注意和*的区别)
[root@adai003 grep]# egrep -n 'o+o' passwd
1:root:x:0:0:roprot:/root:/bin/bash
4:Ctrl-Alt-Deoooleooote ios handled by /usr/lib/systemd/system/c
6:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
- egrep -n 'o?t' 在此?表示其前面的字符出现0次或1次
[root@adai003 grep]# egrep -n 'o?t' passwd
1:root:x:0:0:roprot:/root:/bin/bash
4:Ctrl-Alt-Deoooleooote ios handled by /usr/lib/systemd/system/c
7:pcp:x:996:994:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
8:Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
- egrep -n 'root|nologin' 在此‘|’表示或者
[root@adai003 grep]# egrep -n 'root|nologin' passwd
1:root:x:0:0:roprot:/root:/bin/bash
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
5:adm:x:3:4:adm:/var/adm:/sbin/nologin
6:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7:pcp:x:996:994:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
- grep -nE '(oo){2}' 在此()内的内容表示一个字符组合,即连续出现两次‘oo’=‘oooo’字符串
[root@adai003 grep]# grep -nE '(oo){2}' passwd
4:Ctrl-Alt-Deoooleoooote ios handled by /usr/lib/systemd/system/c
扩展
过滤一个目录下所有某类型文档中含有某字符的行:
[root@adai003 ~]# grep -r --include="*.txt" 'root' ./sed/
./sed/test.txt:root:x:0:0:roprot:/root:/bin/bash
说明: 过滤./sed/目录下所有.txt文件中含有字符串root的行。
转载于:https://my.oschina.net/1995blog/blog/1593431
相关推荐
windows可用的grep工具,把文件目录添加搭配path环境变量即可,使用方法如下: grep -S "searchtext" *.txt grep -S "searchtext" \personal\files\*.txt grep -S searchtext C:\*.* -S是搜索子目录,没有就是搜索...
windows版本的grep工具. 非常好用
在windows的命令行里运行的unix命令
### 使用sed与grep工具过滤实例详解 在处理大量数据时,掌握并熟练运用Linux环境下的文本处理工具至关重要。本文档将详细介绍如何利用sed与grep工具完成特定的数据过滤任务,包括去除特殊符号、按指定规则分割字符...
AJC Grep是一款强大的全文搜索工具,专为IT专业人士设计,尤其适合开发人员在大量代码文件中快速查找和定位特定信息。它具有高效、灵活的特点,可以极大地提高工作效率。 1. **全文搜索**:AJC Grep的核心功能是...
总的来说,cpp-TRE库和agrep工具为IT专业人士提供了一种强大且灵活的工具,能够处理复杂的文本匹配任务,尤其是在需要处理大量数据和模糊查询的场合。掌握并善用这个工具,可以极大地提升开发效率和项目质量。
linux下的数据恢复工具 在说一下删除的原理吧。 当硬盘上的一个文件删除,其实没有真正想象中的那样在硬盘上清除掉的,他是把inode号和block块的那个链子 断开,但是真正的数据还是在硬盘上的,有没有感觉在windos上...
描述中提到,要使用这个grep工具,有两种方法: 1. **解压缩并移动到C:\Windows**:用户需要先将“grep.rar”文件解压缩,这通常可以通过WinRAR、7-Zip等解压缩软件完成。解压后得到的“grep.exe”文件,可以将其...
这里看到的“win10 grep”意味着这个压缩包包含了grep工具的一个版本,专门用于Windows 10操作系统。 在Windows环境中,通常我们使用的是grep的移植版本,因为原生的grep并不直接支持Windows。这个压缩包可能包含了...
5. **使用第三方grep工具**:还有许多专门针对Windows设计的grep工具,如WinGrep、Agent Ransack等,它们提供了图形界面,可能包含更多高级功能。 使用grep命令的基本语法是: ``` grep [选项] 模式 文件... ``` - ...
grep-2.5.4-setup.exe是这个Windows版本的安装程序,用户可以通过运行这个exe文件来安装grep工具。安装过程通常包括接受许可协议、选择安装路径、以及可能的自定义配置选项。安装完成后,grep的命令行工具将被集成到...
Linux中的rga是一个高效且功能丰富的命令行工具,它扩展了经典的grep命令,使得用户能够对各种非文本格式的文件,如PDF、DOCX、SQLite数据库、JPEG图像以及电影字幕(如MKV和MP4文件中的SRT字幕)进行内容搜索。...
总的来说,这个压缩包提供了一个Windows版本的grep工具及其源代码,用户可以学习其内部工作原理,也可以根据自己的需求进行定制或扩展。添加到环境变量后,用户可以在Windows环境下方便地使用grep进行文件内容的快速...
TC工具中的GREP是经典的命令行工具,用于在文本文件中搜索特定模式的行。它的C源程序代码为我们提供了一个深入了解如何实现这种功能的机会。...同时,这也能帮助你更好地理解和使用GREP工具,理解其内部工作原理。
标签"c语言 游戏"暗示了这个GREP工具可能与游戏开发有关,或者至少是作为游戏开发过程中的辅助工具。C语言是游戏编程中常用的底层语言,用于实现高性能和低级别的系统交互。 在压缩包子文件的文件名称列表中,我们...
标题“grep tool noedit”和描述“need japanese windows”似乎涉及到在Windows环境下使用grep工具,同时需要支持日文。grep工具通常用于Linux或Unix系统中,用于搜索文本文件中的特定模式。然而,这里的需求是在...
本文将详细介绍ext3grep工具的使用方法,以及其在恢复Linux系统中ext3文件系统中删除文件的重要作用。 首先,让我们了解一下ext3文件系统。EXT3是Linux下广泛使用的日志文件系统,它提供了文件系统的完整性和可靠性...
总结起来,"windows grep"是指在Windows系统中使用grep工具进行文本搜索的方法,这通常需要通过安装第三方软件或利用类似功能的命令来实现。掌握grep的使用对于处理大量文本数据,特别是在系统日志分析、代码搜索等...
标题中的"grep-2.5.4_bin.zip"是一个压缩包文件,其中包含了grep工具的2.5.4版本。grep是一款广泛使用的命令行工具,主要用于在文本文件中搜索匹配特定模式的行。这个版本可能适用于Windows系统,因为通常Windows...