grep命令简单使用
语法
grep [option] ‘PATTERN’ FILE
该命令就是使用PATTERN模版来对FILE进行匹配以获取我们需要的内容
正则表达式
定义
用元字符和基本字符组合的一种用来描述字符串的匹配模式。
通俗来讲就是,使用一些具有特殊意义的字符来匹配出我们需要的字符。
扩展正则表达式
符号 | 含义 |
---|---|
. | 匹配任意字符 |
匹配次数 | – |
* | 匹配任意个字符 |
? | 前一个字符出现≤1次 |
+ | 前一个字符出现≥1次 |
{n,m} | 前一个字符出现n到m次 |
位置锚定 | – |
^ | 匹配开头 |
$ | 匹配结尾 |
^$ | 匹配空白行 |
单词边界 | – |
\< | 单词左边界 |
\> | 单词右边界 |
\b | 单词边界 |
分组 | – |
() | 将某些字符作为整体,可向后应用 |
[] | 匹配字符组中任意字符 |
Perl正则表达式
符号 | 含义 |
---|---|
\w | 英文字符(数字+字符+下划线) |
\W | 非英文字符(数字+字符+下划线) |
\d | 数字 |
\D | 非数字 |
\s | 空白符(空格,制表符) |
\S | 非空白符 |
选项
-P 支持扩展正则表达式
例子1 .符号
cat test.txt | grep -E '.'
仅使用’.'符号匹配。发现匹配所有,是因为正则默认贪婪匹配,即尽量多匹配相关内容。
例子2 数量匹配
cat test.txt | grep -E 'a?'
匹配次数,发现没有a字符的行也出现,说明‘?’包含0个情况
在这里插入图片描述
cat test.txt | grep -E 'a+'
发现只有一个以上的a符号的行出现
cat test.txt | grep -E 'q{2,4}'
匹配2到4的q字符行
例子3 位置锚定
cat test.txt | grep -E '^the.*re'
匹配the开头,中间任意个任意字符,re结尾的字符行
在这里插入图片描述
例子4 单词边界
cat test.txt | grep -E '\<the\>'
匹配出the单词,前后均不能有其他字符
cat test.txt | grep -E '\bthe\b'
与上一个例子同理
例子5 分组引用
cat test.txt | grep -E '(the).*\1'
the作为分组1被引用
cat test.txt | grep -E '(the).*\1'
(1)作为分组1,为后面的\1引用,(.*)作为分组2引用,其中(.*)和分组2需要一样。
cat test.txt | grep -E '([a-z])(.*)\2\1'
该例子与前面一致,但是[a-z]字符组作为分组1被使用。
-E 支持Perl的正则表达式
例子
cat test.txt | grep -P '(\d).*\1$'
\d匹配单个数字,并被引用。
ldd /bin/ls | grep -P '/lib/.*\s'
\s匹配空白符号,正好获取完整依赖文件
-n显示行号
ldd /bin/ls | grep -P -n '/lib/.*\s'
与上面例子相同,但是显示了匹配内容在输出中的行号
其他选项自行测试
-i 忽略大小写
-A N 输出匹配内容和前N行
-B N 输出匹配内容和后N行
-C N 输出匹配内容和前后N行