Linux grep命令 -- 三剑客老三

摘要:
  --color:将匹配到的内容以颜色高亮显示。如"like"不会匹配alike和liker,只会匹配like      B:与作用相反。    分组及引用:      :将string作为一个整体方便后面引用        1:引用第1个左括号及其对应的右括号所匹配的内容。  扩展增用法:      str|num:匹配str或num内容1、搜索/var/log/secure下,失败的log。

常用选项

  -E :开启扩展(Extend)的正则表达式。

  -i :忽略大小写(ignore case)。

  -v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。

  -n :显示行号

  -w :被匹配的文本只能是单词,而不能是单词中的某一部分。

  -c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。

  -o :只显示被模式匹配到的字符串。

  --color :将匹配到的内容以颜色高亮显示。

  -A  n:显示匹配到的字符串所在的行及其后n行,after

  -B  n:显示匹配到的字符串所在的行及其前n行,before

  -C  n:显示匹配到的字符串所在的行及其前后各n行,context

基本正则模式匹配

    匹配字符:

      . :任意一个字符。

      [abc] :表示匹配一个字符

      [a-Z] :表示匹配一个字符

      [^123] :匹配一个字符,这个字符是除了1、2、3以外的所有字符。

      对于一些常用的字符集,系统做了定义:

      [a-Z] 等价于 [[:alpha:]]

      [0-9] 等价于 [[:digit:]]

      [a-Z0-9] 等价于 [[:alnum:]]

      tab,space 等空白字符 [[:space:]]

      [A-Z] 等价于 [[:upper:]]

      [a-z] 等价于 [[:lower:]]

      标点符号 [[:punct:]]

    匹配次数:

      {m,n} :匹配其前面出现的字符至少m次,至多n次。
      ? :匹配其前面出现的内容0次或1次,等价于{0,1}。
      * :匹配其前面出现的内容任意次,等价于{0,},所以 ".*" 表述任意字符任意次,即无论什么内容全部匹配。

    位置锚定:

      ^ :锚定行首

      $ :锚定行尾。技巧:"^$"用于匹配空白行。

      或<:锚定单词的词首。如"like"不会匹配alike,但是会匹配liker

      或>:锚定单词的词尾。如"like"不会匹配alike和liker,只会匹配like

      B :与作用相反。

    分组及引用:

      (string) :将string作为一个整体方便后面引用

        1 :引用第1个左括号及其对应的右括号所匹配的内容。

        2 :引用第2个左括号及其对应的右括号所匹配的内容。

         :引用第n个左括号及其对应的右括号所匹配的内容。

扩展正则模式匹配

  匹配字符:

      跟基本正则用法一样

  匹配次数:

      {m,n} :匹配其前面出现的字符至少m次,至多n次。
      ? :匹配其前面出现的内容0次或1次,等价于{0,1}。
      * :匹配其前面出现的内容任意次,等价于{0,},所以 ".*" 表述任意字符任意次,即无论什么内容全部匹配。

      +:匹配前面出现的内容1次或1次以上

  位置锚定:

      跟基本正则用法一样

  分组及引用:

      (string) :将string作为一个整体方便后面引用

        1 :引用第1个左括号及其对应的右括号所匹配的内容。

        2 :引用第2个左括号及其对应的右括号所匹配的内容。

         :引用第n个左括号及其对应的右括号所匹配的内容。

  扩展增用法:

      str | num:匹配 str 或 num 内容

1、搜索/var/log/secure下,失败的log。

[root@maintain data]# grep -i 'failed' /var/log/secure
Sep 24 13:25:11 localhost login: pam_systemd(login:session): Failed to release session: Interrupted system call
Sep 27 02:58:13 maintain login: FAILED LOGIN 1 FROM tty1 FOR (unknown), User not known to the underlying authentication module
Sep 27 06:45:29 maintain sshd[1115]: pam_systemd(sshd:session): Failed to release session: Interrupted system call
Sep 27 06:45:32 maintain sshd[1093]: pam_systemd(sshd:session): Failed to release session: Interrupted system call
Sep 27 07:03:45 maintain sshd[1138]: pam_systemd(sshd:session): Failed to release session: Interrupted system call
Sep 27 07:40:19 maintain sshd[1188]: pam_systemd(sshd:session): Failed to release session: Interrupted system call

2、在/etc/selinux/config下,忽略#号开头和空白行

[root@maintain data]# egrep -v '^#|^$' /etc/selinux/config 
SELINUX=disabled
SELINUXTYPE=targeted 

3、只匹配Gogo的行 和 只匹配Gogo的单词

[root@maintain data]# cat reg.txt 
Zhang   Dandan    41117397    :250:100:175
Zhang   Xiaoyu    390320151   :155:90:201
Meng    Feixue    80042789    :250:60:50
Wu      waiwai    70271111    :250:80:75
Liu     Bingbing  41117483    :250:100:175 
Wang    Xiaoai    3515064655  :50:95:135
Zi      Gege      1986787350  :250:168:200
Li      Youjiu    918391635   :175:75:300
Lao     Nanhai    918691635   :250:100:175  
[root@maintain data]# grep -w 'Gege' reg.txt 
Zi      Gege      1986787350  :250:168:200
[root@maintain data]# grep -o 'Gege' reg.txt 
Gege

4、显示/etc/passwd文件中不以/bin/bash结尾的行

grep -v "/bin/bash$" /etc/passwd

5、找出/etc/passwd文件中两位数或三位数

grep '[1-9]{1,2}[1-9]'  /etc/passwd

6、找出/etc/rc.d/rc.sysinit或/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行

grep '^[[:space:]]+[[:alpha:]]' test.txt

7、找出”netstat -tan”命令的结果中以’LISTEN’后跟0,1或多个空白字符结尾行

netstat -tan | grep 'LISTEN[[:space:]].*$'

8、创建test.txt文件内容如下:
He love his lover
He likes his lover
She likes her liker
She loves her liker
查找单词中出现 l和e之间存在两个字符,且一行中要出现两次查找到的内容。

[root@maintain data]# cat > test.txt <<EOF
> He love his lover
> He likes his lover
> She likes her liker
> She loves her liker
> EOF
[root@maintain data]# grep '(l..e).*1' test.txt 
He love his lover
She likes her liker

9、找出/proc/meminfo文件中,所有在大写或小写S开头的行,至少有两种实现方式

egrep "^(S|s)" /proc/meminfo 
egrep ^[Ss] /proc/meminfo

10、显示当前系统上root、Python、maintain用户的相关信息

egrep ^(root|python|maintain) /etc/passwd

11、找出/etc/rc.d/init.d/functions文件中某单词后面跟一个小括号的行

grep "[[:alpha:]]+(" /etc/rc.d/init.d/functions
egrep '[[:alpha:]]+|)|(' /etc/rc.d/init.d/functions

12、使用echo命令输出一绝对路径,使用egrep取出几名

echo /home/maintain/test.txt | grep -E -o "[^/]+/?$"

13、进一步:取出其路径名;类似于对执行dirname命令结果
找出ifconfig命令结果中的1-255之间的数值

ifconfig eth0 | egrep -o "[1-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]"

14、添加用户bash,testbash,basher以及nologin(其中shell为/sbin/nologin),而后找出/etc/passwd文件中用户名同shell名行

egrep "(^[[:alnum:]]+>).*1$" /etc/passwd

免责声明:文章转载自《Linux grep命令 -- 三剑客老三》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VS2015配置OpenCV,使用mfc摄像头程序测试SpringBoot代码生成器,从此不用手撸代码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

QT在linux下获取网络类型

开发中遇到这样一个需求,需要判断当前网络的类型(wifi或者4G或者网线),在这里给大家一块分享下: 1、这里有一个linux指令:nmcli(大家自行百度即可) 2、nmcli device status 这个指令就会打印出你想要的东西 3、如何用QT去调取这个指令获取结果来进行上报呢?来一段代码吧 //执行linux指令获取返回结果 QString...

linux上如何让other用户访问没有other权限的目录

目前遇到一个问题,一个other用户要访问一个目录,他需要在这个目录下创建文件,因此这个目录需要一个写权限,于是就给了这个目录777的权限,这样这个权限有点太大了,很容易出现安全问题,那我们应该怎么办呢。 我们先来看为什么一定要给这个目录777的权限呢?例如这个other用户为lbh,这个目录为/home/tmp_test/。我们在/home目录下创建tm...

linux下编译GDAL3.x(集成Proj和Geos等)

目录 1、准备工作 2、生成 Makefile 1、报错 "checking for sqlite3_open in -lsqlite3 ... no" 2、 checking for proj_create_from_wkt in -lproj 未通过 3、checking for H5Fopen in -lhdf5... no 4、configu...

C#汉字转为Unicode编码

主要用于生成json格式时,将汉字转成Unicoude编码,防止页面乱码。   protected string GetUnicode(string text) { string result = ""; for (int i = 0; i < text.Length; i++) {...

linux下rsync增量同步详解

1、首选检查是否系统安装rsync rpm -qa | grep rsync rsync使用873端口,如果使用防火墙记得开放端口 2、配置服务端 vim/etc/rsyncd.conf 配置如下 uid = nobody #进行备份的用户 nobody为任何用户gid = nobody #进行备份的组 nobody为任何组use chroot = no...

Linux下C++编程环境搭建

  有更简单的方法:在装机器的时候选择  开发工作站系统  development workstation 工作站。免去安装java jdk ,eclipse ,g++,ssh等等各种工具的麻烦。  需要注意的是通过虚拟机安装的时候,要先创建空虚拟机,再从虚拟光驱安装,不要直接选择操作系统类型,不然会默认给安装最简化版的。光中文的设置,和输入法安装 就能让...