Linux的grep文本搜索

1.概述

grep 是一种在 Linux 和 UNIX 系统中用于文本搜索的强大命令行工具。它的名字来自 "Global Regular Expressions Print"。grep 可以在文件中搜索特定的字符串或者正则表达式,并将匹配的行输出到标准输出(stdout)。

2.用法及其相关知识

1)使用grep/egrep命令,默认设置了别名,会自动加上颜色,如果查找出的数据没有颜色,需要手动设置

例如:查询test.txt中包含hello的行

grep 'hello' test.txt:这一行中的hello会被标记上颜色,

如果没有颜色,请使用如下指令

alias grep = 'grep --color=auto'

alias egrep = 'egrep --color=auto'

2)符号概述

正则表达式符号
基础正则^ * . $ .* [] [^] \
扩展正则| + () {} ?
其他正则
1))基础正则

^的意思就是以xxx开头

找出test.txt中以A开头的行:grep '^A' test.txt

$的意思就是以xxx结尾

找出test.txt中以6结尾的行:grep '6$' test.txt

注:有些末尾有空格,注意空格也是符号,需要加上去

test.txt中以6 结尾的行:grep '6 $' test.txt(空格数目保持一致)

^$表示空行

找出test.txt中的空行:grep -n '^$' test.txt

-n:显示行号

排除出test.txt中的空行:grep -v '^$' test.txt

-v:排除

排除出test.txt中的空行并显示行号:grep -nv '^$' test.txt

.表示任意一个字符

找出找出test.txt中qwer、qwdr、qwcr

grep 'qw.r' test.txt

注:.会自动排除空行

\去掉特殊符号(转义字符)

找出找出test.txt中以.结尾的行

grep '\.$' test.txt

*表示一个字符连续出现

找出找出test.txt中0连续出现的地方

grep '0*' test.txt(全文显示,连续0标颜色)

.*表示所有

找出test.txt中以任意开头到pp的行

grep '^.*pp' test.txt

贪婪模式

例如:test.txt数据为root:1234556:bin:213

请找出root:1234556:

grep '^.*:' test.txt,然而这里会输出root:1234556:bin:

贪婪模式他会尽可能的输出最大的范围

正确表达式:grep '^.*6:' test.txt(多写一点)

[]其中之一

找出test.txt中a,b,c任意一个

grep '[abc]' test.txt(全文显示,a,b,c有颜色,一次只找一个)

grep -o '[abc]' test.txt(列出查找过程)

找出test.txt中的数字:grep '[0-9]' test.txt

找出test.txt中的小写字母:grep '[a-z]' test.txt

找出test.txt中的大、小写字母:grep '[a-zA-Z]' test.txt

简写:grep '[a-Z]' test.txt(有些情况下不一定能用)

找出test.txt中的大、小写字母和数字:

grep '[a-zA-Z0-9]' test.txt

找出test.txt中以a,b开头的行:grep '^[ab]' test.txt

找出test.txt中以.或!结尾的行:grep '[.!]$' test.txt(中括号会去掉符号特殊含义,所以不用加\)

[^]非其中之一

找出test.txt中非a,b,c的数据

grep '[^abc]' test.txt(全文显示,a,b,c无颜色,其余有颜色)

2))扩展正则

+表示前一个字符连续出现一次或一次以上

找出test.txt中连续出现的0

grep -E '[0+]' test.txt(grep需要-E来支持扩展正则)

或 egrep '[0+]' test.txt(egrep默认支持扩展正则)

egrep -o '[0+]' test.txt(只展示连续出现的部分)

找出test.txt中连续出现的数字

egrep '[0-9]+' test.txt

找出test.txt中连续出现的字母或单词

egrep '[a-Z]+' test.txt

|表示或者

找出test.txt中包含hello或word的行

egrep '[hello|word]' test.txt

排除test.txt中的空行或者注释,并显示行号

egrep -vn '[^$|#]' test.txt

()表示一个整体,用于反向引用(sed中)

找出test.txt中hello或者heloo

egrep 'hel(l | o)o' test.txt

{}例如a{m,n},表示前一个字符a至少出现m次,最多出现n次

格式
a{m,n}表示前一个字符a至少出现m次,最多n次连续出现范围
a{n}前一个字符出现n次固定次数
a{n,}或a{,m}前一个字符最少n次或最多m次单个范围

找出test.txt中连续出现1-5次的0

egrep '0{1,5}' test.txt

?表示前一个字符出现0次或1次

hello

heello

hllo

上面3行数据为test.txt中的数据,找出e出现0或1次的数据

egrep 'he?llo' test.txt

输出结果为:hello和hllo

3))其他正则

找出test.txt中大小写字母和数字

grep '[[:alnum:]]' test.txt

扩展:

[:alnum:]表示[0-9A-Za-z]

[:alpha:]表示[A-Za-z]

[:digit:]表示数字

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值