linux-正则表达式与grep命令
2021-05-20 本文已影响0人
小小白的jotter
linux-正则表达式与grep命令
一、grep命令
命令 | 作用 |
---|---|
-a | 将二进制文件以text文件的方式搜寻数据 |
-c | 计算找到符合搜索内容的行数 |
-i | 忽略大小写 |
-n | 顺便输出行号 |
-v | 反向选择,即找没有搜内容的行 |
-E | 开启扩展的正则表达式 |
-w | 被匹配的文本只能是单词,而不是单词中的某一部分;精准匹配 |
--color | 将匹配到的内容以颜色高亮显示 |
-A n | 显示匹配到的字符串所在的行及其后n行,after |
-B n | 显示匹配到的字符串所在的行及其前n行,before |
-C n | 显示匹配到的字符串所在的行及其前后各n行,context |
-r | 以递归的方式查找指定目录及其子目录中符合条件的文件 |
grep 可以使用 --color=auto 来将关键字部分使用颜色显示,可以用 alias 设置别名写入 shell 配置文件中。我用的shell 是 zsh,所以在 ~/.zshrc 内加上 alias grep='grep --color=auto' 再以 source ~/.bashrc 来立即生效即可
vim ~/.zshrc
alias grep='grep --color=auto'
source ~/.zshrc
image-20210513163034403
准备文件
image-20210518110629312匹配 ab
grep 'ab' 1.txt
image-20210518111350932
匹配 ab 同时输出 ab 所在的行号
grep -n 'ab' 1.txt
image-20210518111701176
统计含有 ab 的行数
grep -c 'ab' 1.txt
image-20210518111739680
匹配非 ab,即反选
grep -vn 'ab' 1.txt
image-20210518232337324
匹配时忽略大小写
grep -i 'ab' 1.txt
image-20210518232419385
精准匹配被字符分割的字母单词,而不是其中的一部分
grep -w 'cc' 1.txt
image-20210518232651235
二、正则表达式
1、基础正则表达式(Basic Regular Expression)
符号 | 作用 |
---|---|
* | 前一个字符匹配 0 次或任意多次 |
. | 匹配除换行符外的任意一个字符 |
^ | 匹配行首。 |
$ | 匹配行尾。 |
[] | 匹配中括号中指定的任意一个字符,而且只匹配一个字符。例如.[aoeiu]匹配任意一个元音字母, [0-9] 匹配任意一位数字,[a-z][0-9] 匹配由小写字母和一位数字构成的两位字符 |
[^] | 匹配除中括号中的字符以外的任意一个字符。例如,[^0-9] 匹配任意一位非数字字符,[^a-z] 匹配任意一位非小写字母 |
\ | 转义符,用于取消特殊符号的含义 |
^$ | 匹配空行;^$匹配空行,不匹配空格 |
.* | 匹配任意字符 |
^.* | 组合符匹配任意多个字符开头的内容 |
.*$ | 组合符,匹配任意多个字符结尾的内容 |
匹配 0 到多个 a 后接 b
grep -n 'a*b' 1.txt
image-20210520085326823
匹配行首为 aab
grep -n '^aab' 1.txt
image-20210520085831889
匹配行尾为 bcc
grep -n 'bcc$' 1.txt
image-20210520090016963
匹配 Ab 或者 ab
grep -n '[Aa]b' 1.txt
image-20210520090912769
匹配非 Aa
grep -n '[^Aa]' 1.txt
image-20210520091154058
匹配 c* 。*匹配前面的字符 0 或多次,可以用转义符 \ 取消 * 的含义
grep -n 'c*' 1.txt
grep -n 'c\*' 1.txt
image-20210520091836590
匹配空行
grep -n '^$' 1.txt
image-20210520092004756
2、扩展正则表达式(Extended Regular Expression)
符号 | 作用 |
---|---|
+ | 匹配前一个字符1次或多次 |
? | 匹配前一个字符0次或1次 |
| | 表示或者,同时过滤多个字符 |
() | 分组过滤,被括起来的内容表示一个整体 |
{n,m} | 匹配前一个字符最少n次,最多m次 |
{n,} | 匹配前一个字符最少n次 |
{n} | 匹配前一个字符正好n次 |
{,m} | 匹配前一个字符最多m次 |
grep 用扩展正则表达式的时候需要加上 -E 开启
b+ 表示匹配 b 一次或者多次,与 b* 相比,b+ 最少也要匹配1次
grep -n 'b*' 1.txt
grep -En 'b+' 1.txt
image-20210520092715010
匹配 ab 或者 Ab 或者 bc
grep -En 'ab|Ab|bc' 1.txt
image-20210520094223877
匹配 aab 或者 AAb
grep -En '(aa|AA)b' 1.txt
image-20210520095730453
匹配 a 至少 2 次,至多 3 次
grep -En 'a{2,3}' 1.txt
image-20210520095918161
匹配 a 至少两次
grep -En 'a{2,}' 1.txt
image-20210520100051887
匹配 ab 至多一次
grep -En '(ab){,1}' 1.txt
image-20210520100253089
匹配 ab 正好一次
grep -En '(ab){1}' 1.txt
image-20210520100402223