grep与egrep命令怎么在Linux中使用

2022年 10月 16日 发表评论

新春采购季点击领腾讯云8888元代金券阿里云史上最大力度降价,最高降55%:点击了解续费贵、升级贵,选配置高、长期的产品;腾讯云老用户享新人优惠方法:用Q登录、1人可注册3个新账号帕鲁火热:点击一键部署阿里云帕鲁服务器点击一键部署腾讯云帕鲁服务器

可做文件内的字符串查找与白鹭命令怎么在Linux操作系统操作系统中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

rep / egrep

语法:grep[-CinVabC]“word”文件名

-c:打印符合要求的行数

-我:忽略大小写

-n:在输出符合要求的行的同时连同行号一起输出

-v:打印不符合要求的行

-答:后跟一个数字(有无空格都可以),例如亚洲2航空亚洲2号服务器则表示打印符合要求的行以及下面两行

-乙:后跟一个数字,例如B2则表示打印符合要求的行以及上面两行

-C:后跟一个数字,例如C2则表示打印符合要求的行以及上下各两行

把包含暂停的行以及这行下面的两行都打印出。

[root @ localhost ~]# grep-A2 ' halt '/etc/passwd

halt : x :7:03360 halt :/sbin :/sbin/halt

mail : x :8336012: mail :/var/spool/mail :/sbin/nologin

uucp : x :10:14: uucp :/var/spool/uucp :/sbin/nologin把包含暂停的行以及这行上面的两行都打印出。

[root @ localhost ~]# grep-B2 ' halt '/etc/passwd

sync : x :5336003360 sync :/sbin :/bin/sync

关机: x :6336003360关机:/sbin :/sbin/关机

halt : x :7:03360 halt :/sbin :/sbin/halt把包含暂停的行以及这行上面和下面的各两行都打印出。

过滤出带有某个关键词的行并输出行号

[root @ localhost ~]# grep-n ' root '/etc/passwd

1: root : x :0336003360 root :/root :/bin/bash

11: operator : x :11:0: operator :/root :/sbin/nologin过滤不带有某个关键词的行,并输出行号

[root @ localhost ~]# grep-NV ' nologin '/etc/passwd

1: root : x :0336003360 root :/root :/bin/bash

6:同步: x :5336003360同步3360/sbin :/bin/sync

7:关机: x :633600:关机:/sbin :/sbin/关机

8: halt : x :7:0: halt :/sbin :/sbin/halt

26: test : x :51133605113360:/home/test :/bin/bash

27: test 1: x :51233605113360:/home/test 13:/bin/bash过滤出所有包含数字的行

[root @ localhost ~]# grep '[0-9]'/etc/inittab

#upstartworks,seeinit(5),init(8),itctl(8).

# 0-暂停(DoNOTsetinitdefaulttothis)

# 1-单用户模式

# 2-多用户,无终端设备(安全措施3,如果您不联网)

# 3-全多用户模式

# 4-未使用

#5-X11

# 6-重新启动(DoNOTsetinitdefaulttothis)

id:3:initdefault:过滤出所有不包含数字的行

[root @ localhost ~]# grep-v '[0-9]'/etc/inittab

# inittabsonly仅由upstart用于hedefaultrunlevel .

#

# addingotherconfigurationherewillhoveffefconyor system .

#

#系统初始化由/etc/init/RcS启动。主配置文件

#

# individualrunleversestartedby/etc/init/RC。主配置文件

#

# Ctrl-Alt-deleteishhandledby/etc/init/control-Alt-delete。主配置文件

#

# terminateysarehandledby/etc/init/tty。con fand/etc/init/serial。conf,

#withconfigurationin/etc/

sysconfig/init. # #Forinformationonhowtowriteupstarteventhandlers,orhow # #Defaultrunlevel.Therunlevelsusedare: #

把所有以 ‘#' 开头的行去除

[root@localhost~]#grep-v'^#'/etc/inittab  id:3:initdefault:

去除所有空行和以 ‘#' 开头的行

[root@localhost~]#grep-v'^#'/etc/crontab|grep-v'^$'  SHELL=/bin/bash  PATH=/sbin:/bin:/usr/sbin:/usr/bin  MAILTO=root  HOME=/

在正则表达式中, “^” 表示行的开始, “$” 表示行的结尾,那么空行则可以用 “^$” 表示,如何打印出不以英文字母开头的行呢?

[root@localhost~]#vimtest.txt  [root@localhost~]#cattest.txt  123  abc  456  abc2323  #laksdjf  Alllllllll

先在test.txt中写几行字符串,用来做实验。

[root@localhost~]#grep'^[^a-zA-Z]'test.txt  123  456  #laksdjf
[root@localhost~]#grep'[^a-zA-Z]'test.txt  123  456  abc2323  #laksdjf

如果是数字的话就用[0-9]这样的形式,当然有时候也可以用这样的形式[15]即只含有1或者5,注意,它不会认为是15。如果要过滤出数字以及大小写字母则要这样写[0-9a-zA-Z]。另外[ ]还有一种形式,就是[^字符] 表示除[ ]内的字符之外的字符。

过滤任意一个字符与重复字符

[root@localhost~]#grep'r..o'/etc/passwd  operator:x:11:0:operator:/root:/sbin/nologin  gopher:x:13:30:gopher:/var/gopher:/sbin/nologin  vcsa:x:69:69:virtualconsolememoryowner:/dev:/sbin/nologin

. 表示任意一个字符,上例中,就是把符合r与o之间有两个任意字符的行过滤出来, * 表示零个或多个前面的字符。

[root@localhost~]#grep'ooo*'/etc/passwd  root:x:0:0:root:/root:/bin/bash  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin  uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin  operator:x:11:0:operator:/root:/sbin/nologin  postfix:x:89:89::/var/spool/postfix:/sbin/nologin

‘ooo*' 表示oo, ooo, oooo ... 或者更多的 ‘o' 现在你是否想到了 ‘.*' 这个组合表示什么意义?

[root@localhost~]#grep'.*'/etc/passwd|wc-l  27  [root@localhost~]#wc-l/etc/passwd  27/etc/passwd

‘.*' 表示零个或多个任意字符,空行也包含在内。

指定要过滤字符出现的次数

[root@localhost~]#grep'o{2}'/etc/passwd  root:x:0:0:root:/root:/bin/bash  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin  uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin  operator:x:11:0:operator:/root:/sbin/nologin  postfix:x:89:89::/var/spool/postfix:/sbin/nologin

也可以不用脱意符 加上-E

grep-E'o{2}'/etc/passwd

这里用到了{ },其内部为数字,表示前面的字符要重复的次数。上例中表示包含有两个o 即 ‘oo' 的行。注意,{ }左右都需要加上脱意字符 ‘', 另外,使用{ }我们还可以表示一个范围的,具体格式是 ‘{n1,n2}' 其中n1<n2,表示重复n1到n2次前面的字符,n2还可以为空,则表示大于等于n1次。

上面部分讲的grep,另外常常用到egrep这个工具,简单点讲,后者是前者的扩展版本,我们可以用egrep完成grep不能完成的工作,当然了grep能完成的egrep完全可以完成。如果你嫌麻烦,egrep了解一下即可,因为grep的功能已经足够可以胜任你的日常工作了。下面介绍egrep不用于grep的几个用法。为了试验方便,把test.txt 编辑成如下内容:

rot:x:0:0:/rot:/bin/bash  operator:x:11:0:operator:/root:/sbin/nologin  operator:x:11:0:operator:/rooot:/sbin/nologin  roooot:x:0:0:/rooooot:/bin/bash  1111111111111111111111111111111  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

筛选一个或一个以上前面的字符

[root@localhost~]#egrep'o+'test.txt  rot:x:0:0:/rot:/bin/bash  operator:x:11:0:operator:/root:/sbin/nologin  operator:x:11:0:operator:/rooot:/sbin/nologin  roooot:x:0:0:/rooooot:/bin/bash  [root@localhost~]#egrep'oo+'test.txt  operator:x:11:0:operator:/root:/sbin/nologin  operator:x:11:0:operator:/rooot:/sbin/nologin  roooot:x:0:0:/rooooot:/bin/bash  [root@localhost~]#egrep'ooo+'test.txt  operator:x:11:0:operator:/rooot:/sbin/nologin  roooot:x:0:0:/rooooot:/bin/bash

筛选零个或一个前面的字符

[root@localhost~]#egrep'o'test.txt  rot:x:0:0:/rot:/bin/bash  operator:x:11:0:operator:/root:/sbin/nologin  operator:x:11:0:operator:/rooot:/sbin/nologin  roooot:x:0:0:/rooooot:/bin/bash  1111111111111111111111111111111  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  [root@localhost~]#egrep'ooo'test.txt  operator:x:11:0:operator:/root:/sbin/nologin  operator:x:11:0:operator:/rooot:/sbin/nologin  roooot:x:0:0:/rooooot:/bin/bash  [root@localhost~]#egrep'oooo'test.txt  operator:x:11:0:operator:/rooot:/sbin/nologin  roooot:x:0:0:/rooooot:/bin/bash

筛选字符串1或者字符串2

[root@localhost~]#egrep'aaa|111|ooo'test.txt  operator:x:11:0:operator:/rooot:/sbin/nologin  roooot:x:0:0:/rooooot:/bin/bash  1111111111111111111111111111111  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

egrep中( )的应用

[root@localhost~]#egrep'r(oo)|(at)o'test.txt  operator:x:11:0:operator:/root:/sbin/nologin  operator:x:11:0:operator:/rooot:/sbin/nologin  roooot:x:0:0:/rooooot:/bin/bash

用( )表示一个整体,例如(oo)+就表示1个 ‘oo' 或者多个 ‘oo'

[root@localhost~]#egrep'(oo)+'test.txt  operator:x:11:0:operator:/root:/sbin/nologin  operator:x:11:0:operator:/rooot:/sbin/nologin  roooot:x:0:0:/rooooot:/bin/bash

关于grep与egrep命令怎么在Linux中使用问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

小咸鱼

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: