grep及基本正则表达式

1、grep(Global search REgular expression and Print out the line)

  grep是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep、egrep和fgrep。

1.1、grep的用法

  • grep [OPTIONS] PATTERN [FILE…]
  • grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]
[root@localhost ~]# cat test
root
rootck
chroot
rroot
roott
rrot
rrtt
rott
Root
rOOT
RooT
[root@localhost ~]# grep "root" test
root
rootck
chroot
rroot
roott

OPTIONS:
   -i:忽略字符大小写

[root@localhost ~]# grep -i "root" test
root
rootck
chroot
rroot
roott
Root
rOOT
RooT

  -o:仅显示匹配到的字符串本身

  [root@localhost ~]# grep -o "root" test
  root
  root
  root
  root
  root

   -V:显示不能被模式匹配到的行

  [root@localhost ~]# grep -v "root" test
  rrot
  rrtt
  rott
  Root
  rOOT
  RooT

  -q:静默模式

  [root@localhost ~]# grep -q "root" test         #不显示输出

       -E:仅支持使用扩展的正则表达式
       -A #:显示匹配到的行后#行
       -B #:显示匹配到的行前#行
       -C #:显示匹配到的行前后各#行
       -F:快速搜索,等于直接使用fgrep命令
      -R:递归查询某个目录下的所有文件

2、基本正则表达式元字符

2.1、字符匹配

  .:匹配任意单个字符
  [ ]:匹配指定范围内的任意单个字符
  [^ ]:匹配指定范围外的任意单个字符

2.2、匹配次数

  用在要指定其次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式;

  *:匹配其前面的字符任意次;0,1,多次
  .*:匹配任意长度的任意字符
  \?:匹配其前面的字符0次或1次
  \+:匹配其前面的字符1次或多次
  \{m\}:匹配其前面的字符m次
  \{m,n\}:匹配其前面的字符至少m次,至多n次;

2.3、位置锚定

  ^:行首锚定
  $:行尾锚定
  ^PATTERN$:用于PATTERN来匹配整行

  单词:非特殊字符组成的连续字符都称为单词;
  \<或\b:词首锚定
  \>或\b:词尾锚定
  \<PATTERN\>:匹配完整单词

2.4、分组及引用

\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理;

NOTE:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:
    \1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符
    \2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符
    ......

3、练习

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

  • grep -i “^s” /proc/meminfo
  • grep -E “^(s|S)” /proc/meminfo
  • grep “^[sS]” /proc/meminfo

3.2、显示当前系统上root、centos、user1用户的相关信息

  • grep -E “^(centos|user1|root)” /etc/passwd
  • grep -E “^\<(centos|user1|root)>” /etc/passwd
    ##3.3、找出/etc/rc.d/init.d/functions文件中某单词后面跟一个小括号的行
  • grep -E “[[:alpha:]]+()” /etc/rc.d/init.d/functions

3.4、使用echo命令输出一绝对路径,使用egrep取出基名;

  • echo “/etc/httpd/” | egrep -o “[^/]+/?$”

3.5、找出ifconfig命令结果中的1-255之间的数值

  • ifconfig | grep -Eo “\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])>”

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

  • egrep “^ ([^:]+>).*\1$” /etc/passwd
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值