grep 文本过滤命令

grep简介

  • grep(Global search regular expression and print out the line)全面搜索研究正则表达式并显示出来。grep 命令是一种强大的文本搜索工具,根据用户指定的模式”对目标文本进行匹配检查,打印匹配到的行,由正则表达式或者字符及基本文本字符所编写的过滤条件。Unix的grep家族包括grep、egrep和fgrep。
  • grep的过滤是一种贪婪模式,只要有你搜的字符串则都会被过滤出来。
  • grep 基本正则表达式
    egrep = grep -E 扩展正则表达式

grep 正则表达式与扩展正则表达式

  • 正规的 grep 不支持扩展的正则表达式子,竖线是用于表示“或”的扩展正则表达式元字符 , 正规的grep无法识别加上反斜杠,这个字符就被翻译成扩展正则表达式,就像 egrp和grep -E 一样。
    举例:过滤出passwd文件里有root或bash的行:
grep "root|bash" passwd没有结果,所以需要扩展的grep
egrep "root|bash" passwd 过滤passwd文件里有root或bash的行
=grep -E "root|bash" passwd

在这里插入图片描述

查看帮助信息

  • 命令:grep --help
  • 命令:man grep
    在这里插入图片描述

grep 的格式

grep匹配条件处理文件
greprootpasswd
grep^rootpasswd
greproot$passwd
grep -irootpasswd
grep -E“root /bash”passwd

举例:

向passwd中加入chroot
grep root passwd    ##贪婪模式 chroot也会过滤出来
grep ^root passwd  ##以root开头的行
grep bash$ passwd  ##以bash结尾的行

在这里插入图片描述

grep -E ^root passwd | grep bash$     ##passwd里以root开头,bash结尾的行,grep是单模式的,所以需要用扩展的grep即grep -E
grep -E "^root|bash$" passwd          ##passwd里以root开头的或passwd结尾的

在这里插入图片描述

cat -b passwd | grep games -2      ##passwd里的有games的行以及这一行的上下两行
cat -b passwd | grep games -A2    ##A=After,后两行
cat -b passwd | grep games -B2    ##B=Before,前两行

在这里插入图片描述

测试

找出所有可以登陆系统的用户
注意/etc/passwd文件中以sh结尾的都可以登陆。
命令:grep -E "sh$" /etc/passwd | cut -d : -f 1
在这里插入图片描述

vim login.sh

#!bin/bash
grep -E "sh$" /etc/passwd | cut -d : -f 1

执行结果:
在这里插入图片描述
shell的种类:cat /etc/shells
在这里插入图片描述

grep 中的正则表达式

^westos
westos$
'w....s'
'w.....'
'.....s'

.就相当于占位符 
x*y  x出现0-任意次

新建一个文件:test
wetos
weetos
weeetos
ws

grep ws test
grep w...s test   w,s中间三个字符的
grep w....s test   w,s中间四个
grep w.....s test 
grep -E w?????s test  任意多个?

举例:
在这里插入图片描述

grep 中字符的匹配次数设定

*字符出现 [0- 任意次 ]
\ ?字符出现 [0-1次 ]
\ +字符出现 [1- 任意次 ]
\ {n\ }字符出现 [n次 ]
\ {m,n\ }字符出现 [ 最少出现 m次,最多出现 n次 ]
\ {0,n\ }字符出现 [0-n次 ]
\ {m,\ }字符出现 [ 至少 m次 ]
\ (xy\ ){n\ }xy关键字出现 [n次 ]
. *关键字之间匹配任意字符
cat test
xy
xxy
xxxxxxy
xxxxxxay
xyxyxyyxyy
y

grep xy test  xy挨着的所有行
grep x*y test   y前的x出现0-任意次
grep -E x?y test  y前的x出现0-1次
grep -E 'x+y' test  y和x一起出现1-任意次
grep -E 'x{2}y' test   x出现两次,y前的
grep -E 'x{2,3}y' test   y前的x出现2次或3次
grep -E 'x{2,}y' test  y前的x出现2-无数次
grep -E 'x{,2}y' test  y前的x出现0-2次
grep -E '(xy){2,}' test  xy出现2-无数次
grep -E 'x.*y' test   x和y之间匹配任意字符

grep -E 'x*y' test  y前有任意多个x

举例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

grep 中字符的匹配位置设定

^ 关键字
关键字 $
< 关键字
关键字 >
< 关键字 >

举例:

grep "^root" passwd     ##passwd里以root开头的行
grep "nologin$" passwd      ##passwd里以nologin结尾的行
grep -E "\<root" passwd    ##以root关键字开头的所有root单词,rootch也会被过滤
grep -E "root\>" passwd      ##以root结尾的单词
grep -E "\<root\>" passwd  ##只过滤root

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试题

抓取你的ip,输入网卡设备就会输出ip
命令:ifconfig eth0 | grep -E "\<inet\>" | cut -d " " -f 10可以看到eth0的ip
在这里插入图片描述
脚本内容:

vim ip.sh

#!/bin/bash
[ -z "$1" ] && {
        echo "Error:Please input a network interface!"
        exit
}

ifconfig $1 | grep -E "\<inet\>" | cut -d " " -f 10

执行结果:
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值