Shell生信linux

linux-正则表达式与grep命令

2021-05-20  本文已影响0人  小小白的jotter

linux-正则表达式与grep命令

linux正则表达式

linux正则表达式

shell元字符(正则表达式)及其用法详解

一、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
上一篇下一篇

猜你喜欢

热点阅读