linux文本处理工具之grep与正则表达式语法
Posted zkwjl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux文本处理工具之grep与正则表达式语法相关的知识,希望对你有一定的参考价值。
Grep
介绍
Linux 文本处理三剑客之一,文件过滤工具(另外两剑客为sed:文本编辑工具,awk:文本报告生成器) 拥有着,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行的功能。
使用
Grep除了正常的字符使用之外 还可以运用正则表达式字符。
Grep的重要命令选项
--color=auto 关键字高亮显示(centos7默认)
*-v 关键字 显示不包含关关键字的行,取反
*-i 关键字 忽略关键字的大小写
-n 显示的结果每行前增加行号
-c 仅显示找出的结果的行数
*-o 仅显示匹配到的关键字,不显示同行的其他内容
*-w 关键字 匹配整个单词
*-E 等于egrep 使用扩展正则表达式
正则表达式
正则表达式regexp又称规则表达式,是由一类特殊字符及文本编写的,其中有些字符有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。
正则表达式的使用
具有特殊意义的字符元字符有着 字符匹配,匹配次数、位置锚定、分组四个功能。掌握了这四个功能 在运用正则表达式的时候会事半功倍
以下四个功能处理的都是元字符。
1.字符匹配:
当我们想在文本中查找某些内容时,首先就需要进行文本搜索,这时就需要对部分字符进行匹配从而找到想要的内容。
.在元字符里表示匹配任意的一个单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[: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.位置锚定 :
使您能够将正则表达式固定到行首或行尾。它们还使您能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。
定位符用来描述字符串或单词的边界,^ 和 $ 分别指字符串的开始与结束, 描述单词的前或后边界,B 表示非单词边界。
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
< 或 词首锚定,用于单词模式的左侧>或 词尾锚定;用于单词模式的右侧
<PATTERN> 匹配整个单词
4.分组
当前方字符通过() 绑定在一起时,此时的字符可以当做一个整体来进行操作。
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为 : 1, 2, 3, ...,
1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符。
此时就可以运用后项引用来实现某些功能,例如:
‘^(bin).*1$’其中的1就表示前面的第一个括号包裹起来的bin
或者:|
示例:a|b: a或b
特殊的元字符
符号 |
描述 |
* |
字符出现的次数0或多次 |
. |
任意的单一字符 |
^/$ |
开头或结尾 |
{n} |
表示匹配n次 |
[] |
括号里的任意单一字符 |
转译符 |
|
+ |
字符出现一次或多次 |
? |
出现0次或1次 |
() |
分组表示 |
|
后项引用 |
{m,n} |
出现的次数高于m小于n |
总结:正则表达式的运用可以在多种计算机语言中使用,他是一种规则的定义,来实现对字符串的操作。
以上是关于linux文本处理工具之grep与正则表达式语法的主要内容,如果未能解决你的问题,请参考以下文章