linux文本处理三剑客之grep
来源:互联网 发布:java 如何打包jar文件 编辑:程序博客网 时间:2024/06/06 03:22
grep简介
grep:英文缩写Global search Regular Expression and Print out the line(全面搜索正则表达式并把行打印出来),是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
正则表达式
正则表达式是对字符串操作的一种逻辑公式,用事先定义好的一组特殊字符,组成一个“规则字符集合”,根据用户指定的文本模式对目标文件进行逐行搜索匹配,显示能被模式匹配到的结果。
给定一个正则表达式和另一个目标字符串,我们可以从给定的字符串中通过匹配模型,过滤字符串中不想要的的字符串,得到目标字符串,减少工作量。
正则表达式分类
GUN/linux下grep包括 grep、egrep和 fgrep
- egrep是grep的扩展,等同grep -E
- fgrep就是fixed grep或fast grep,等同grep -F不使用任何正则表达式,直接进行字符串匹配
常用的正则表达式一般为基本正则表达式grep和扩展正则表达式egrep。
扩展正则表达式与基础正则表达式的唯一区别在于:? + () {} 这几个字符。
基础正则表达式中,如果你想? + () {}表示特殊含义,你需要将他们转义,
而扩展正则表达式中,如果你想? + () {} 不表示特殊含义,你需要将他们转义。
如下例子:
[echo@localhost]$ echo aaaa | grep 'a?'[echo@localhost]$ echo aaaa | grep '\a?'aaaa[echo@localhost]$ echo aaaa | grep -E 'a?'aaaa[echo@localhost]$ echo aaaa | egrep ' a?'aaaa
语法
grep [OPTION] PATTERN [FILE]…
-o
:只显示被模式匹配到的内容
-i
:ignore case,不区分字符大小写
-E
:使用扩展的正则表达式
-w
:匹配一个完整的单词
-v
:没有匹配到的行
-n
:打印出匹配字符串的在文件中的行号
--color
:对匹配的字符串着色打印
-5
:匹配字符及前后各5行
-A 5
:匹配字符及后5行,同-C 5
-B 5
:匹配字符及前5行
grep -oin 'root' /etc/passwd #显示行号,不区分大小写只匹配到字符本身
字符匹配
.
:匹配任意单个字符
[]
:匹配指定范围内的任意单个字符
[^]
:匹配指定范围外的任意单个字符
[0-9]
:匹配数组 0-9 的任意一个
[0-z]
:匹配任一数字及小写字母
[0-Z]
:匹配任一数字及大小写字母
[[:digit:]]
:匹配任意单个数字
[[:lower:]]
:匹配任意单个小写字母,等同[a-z]
[[:upper:]]
:匹配任意单个大写字母,等同[A-Z]
[[:space:]]
:匹配任意单个空白字符
[[:punct:]]
:匹配任意单个标点符号
[[:alpha:]]
:匹配任意单个英文字母
[[:alnum:]]
:匹配任意单个字母或数
grep [^0-9[:lower:]] /etc/passwd # 匹配除数字和小写字母以外的字符
匹配次数
*
: 匹配前面的字符任意次
.*
:匹配任意次 ,即匹配任意长度的任意字符
\?
:匹配前面的字符 0 次或者 1 次
\+
: 匹配前面的字符 1 次或多次
\{m\}
:匹配前面的字符 m 次
\{m,n\}
:匹配前面的字符至少 m 次,至多 n 次
\{m,\}
:匹配前面的字符至少 m 次
\{,n\}
:匹配前面的字符至多 n 次
grep "[0-9]\+.*[[:punct:]]\{3,\}" /etc/passwd # 至少一个数字及3个以上标点符号
位置锚定
^
:锚定行首
$
:锚定行尾
\<
或\b
:锚定词首
\>
或\b
:锚定词尾
grep -n "^[[:space:]]\+$" mydata.txt # 找出空白行的行号grep "^#[[:space:]]\{1,\}[^[:space:]]" /etc/inittab # 以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行grep '^\([0-9]\).*\1$' /etc/inittab # 一个数字开头并以一个与开头数字相同的数字结尾的行
分组引用
# 首个单词和最后一个单词一样的行grep "^\(\# 匹配包含mysql或apache或redis的行,`|`表示或 egrep "mysql|apache|redis" mydata.txt # 匹配ipv4的地址 egrep "(\# 取出默认shell为bash,且其用户ID号最小的用户的用户名 grep 'bash$' /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f1以使用括号
\(***\)
将一组字符括起来,表示这一组字符被当作一个整体,还可以使用 \1, \2… 对前面括号匹配所匹配的字符串进行引用
- linux文本处理三剑客之grep
- linux文本处理三剑客之grep
- linux文本处理三剑客之grep
- Linux文本处理三剑客之grep命令
- Linux文本处理三剑客(grep)
- Linux文本处理三剑客(grep)
- Shell文本处理三剑客之grep
- 文本处理三剑客之grep
- Shell文本处理三剑客之grep
- linux文本处理三剑客(一):grep命令详解
- 01-shell文本处理三剑客之grep
- 文本处理三剑客之grep、egrep、fgrep
- 第七章 Shell文本处理三剑客之grep
- Linux文本处理三剑客之sed
- Linux文本处理三剑客之awk
- Linux文本处理三剑客之sed
- Linux 基础命令(五)—— 文本处理三剑客之grep
- Linux上文本处理三剑客之grep
- 1022. Digital Library (30)
- maven项目的单元测试和遇到的问题
- EXCEL导入导出
- kotlin属性和变量
- Zookeeper实例Curator API-Master选举
- linux文本处理三剑客之grep
- css背景与列表样式使用
- mysql基础
- Spring 入门
- springMVC 利用拦截器防止sql注入
- spring的生命周期
- 初学c++之一维数组
- Spring通过工厂方法配置bean
- 麻雀虽小,五脏俱全——由C语言小程序深入学习软件工程和设计开发规范