> 文章列表 > Linux三剑客之grep命令与正则表达式

Linux三剑客之grep命令与正则表达式

Linux三剑客之grep命令与正则表达式

Linux 三剑客

grep : 负责过滤,可以对文本、命令结果进行过滤
sed   : 流编辑器,文本编辑工具
awk   :Linux的文本报告生成器(格式化文件),Linux上是gwak(GNU/AWK)

😈 grep命令介绍

Global search REgular expression and Print ouy the line.
作用:文本搜索工具,根据用户指定的模式(过滤条件)对目标文件进行匹配检查,打印匹配到的行。
模式:由正则表达式的元符号文本符号所编写出来的过滤条件

grep [options] [pattern] file

  • -i :「 ignorecase」 | 忽略大小写
  • -o : 仅显示匹配到的字符串本身
  • -v : 「–imvert-match」 | 显示不能被模式匹配到的行(取反)
  • -E : 支持使用扩展的正则表达式元字符
  • -q : 「–quiet,–sitent」 | 静默模式,即不输出任何信息。

举几个🌰

👾 空行

grep ^$ a.txt # 查找所有空行
grep ^$ a.txt -n # 查找所有空行并显示行号
grep ^$ a.txt -c # 查找总共有多少空行
grep ^$ a.txt  -n -v  # 查找不是空行的内容并显示行号
grep "." a.txt # 查找所有的非空行

👾 开头结尾篇

grep ^# grep.txt -n # 查找以#开头的行(一般是注释行)
grep ^$ a.txt  v | grep ^# grep.txt -v -n # 查找除了井号开头以及空行的行
grep -n "\\.$" a.txt # 查找以`.`结尾的行 ,注意要使用转义字符`\\`
grep -n "/bin/bash$" /etc/passwd # 查找使用/bin/bash的用户

👾 行内内容

grep ".s" a.txt # 查找文件中的出现的?s
grep "i*" a.txt # 查找文件中的i
grep ".*e" a.txt # 走到e结束
grep [a-z] a.txt # 找出文件中所有的小写字母
grep [a-zA-Z0-9] a.txt # 找出文件中所有的大小写字母和数字

👾 扩展正则表达式

grep -E "i+" a.txt # 查找所有包含i的行
grep -E "c{4,}" a.txt # 查找至少4个连续的c
grep -E "c{4,6}" a.txt # 查找最少4个最多6个连续的c

👾 小括号

执行下面命令创建一个b.txt文件方便下面练习:
touch b.txt && echo -e “good\\ngooood\\ngoooooooooood\\ngooooooooooooooooooooood\\ngad\\nglad” >> b.txt

grep -En "g(oo|la)d" b.txt # 查找`good`与`glad`这两个单词并显示行号

👾 find命令

find命令是查找文档文件夹下文件信息的,可以进行遍历查找符合要求的文件,这里不做扩展,使用到请自查

find /home/jim -mtime 1 # 查找最近两天创建的文件

在Linux上所有文件的行都是以$结尾,可以使用cat -en filename进行验证

📜 附录:正则表达式

基本正则表达式

符号 名称 含义
^ 尖角符 以…开头的行,比如^Jim表示以Jim开头的行
$ 美元符 以…结尾的行,比如Jim$表示以Jim结尾的行
^$ 组合符 表示空行
. 句号符 匹配有且只有一个字符的行,不能匹配空行
\\ 转义字符 让特殊含义的字符,现出原形,还原本意,比如\\.表示小数点
* 星号 匹配前一个字符(连续出现)0次或1次以上,重复0次代表空,即匹配所有内容
.* 组合符 匹配所有内容
^.* 组合符 匹配任意多个字符开头的内容
.*$ 组合符 匹配任意多个字符结尾的内容
[abc] 匹配集合内任意一个字符,a或b或c,也可以写成[a-c]
[ \\^abc] 取反操作 匹配除了^后面的任意字符之外的字符,不可以是a或b或c,^表示取反操作

扩展正则表达式

扩展正则表达式必须配合grep -E使用才会生效

符号 名称 含义
+ 加号 匹配前一个字符一次或多次
[:?]+ 中括号+加号 表示匹配括号内的:?一次或多次
? 问号 匹配前一个字符0次或1次
| 竖杠(管道符) 表示「或者」,同时过滤多个字符串
() 括号 分组过滤,括号内的内容为一个整体
a{n,m } 花括号 匹配前一个字符a至少n次,至多m次
a{n} 花括号,单参数 匹配前一个字符正好n次
a{n,} 花括号缺参数 匹配前一个字符至少n次
a{,m} 花括号缺参数 表示匹配前一个字符最多m次