grep与正则表达式

1、grep程序git

一、Linux下有文本处理三剑客:grep sed awk正则表达式

  grep:文本 行过滤工具shell

  sed : 文本行编辑器(流编辑器),改文件通常用sedbash

  awk:报告生成器(作文本输出格式化)编辑器

二、Grep工具

包含三个命令:它们是用来进行行匹配(pattern)匹配的spa

(1)grep的分类regexp

       grepit

                 egrep = grep -E /使用扩展的正则表达式进行匹配io

                 fgrep = fast grep //只使用文件通配符进行匹配

 grep默认使用正则表达式进行文本匹配

  (2)grep的用法

                 grep [option] … PATTERN [filename]

  (3) grep的常见选项

                 -E 支持使用扩展的正则表达式(ERE)regexp

                 -P 使用perl语言的正则表达式引擎进行搜索(每种语言的正则表达式引擎搜索机制都不一样,甚至sed grep awk使用的regexp引擎也不相同)

                  -i  忽略大小写

                  -v  进行反选             

                  -o  仅仅输出匹配的内容(默认输出的是匹配到的行)     

                  --color=auto 语法着色

                  -n  显示行号

2、PATTERN—正则表达式

做用:经过一些特殊字符,来表示一类字符内容,而后交给前面的命令来执行;若是使用他特殊字符自己含义,就须要\进行转义

一、 字符匹配

  .  表明任意一个字符 ?

  [ ] 表明范围内的任意一个字符

  [^ ] 表明范围外的任意一个字符

  [0-9] [:digit:] [:alnum:][:alpha:][:upper:][:space:][:punct:]

二、 次数匹配

  * 匹配前面的字符0到无数次

  ? 匹配前面的字符0到1次

  + 匹配前面的字符1到n次

  \{m\} 匹配前面的字符m次

  \{m,n\} 匹配前面的字符m到n次

  \{m,\} 匹配至少m次

    示例:[abc] + abbbbcccc

               a\{7\}  匹配a7次,即aaaaaaa

               \{0,n\} 匹配前面的字符0次到n次 【0次要不要】

三、 位置锚定

  ^  锚定行首

  $  锚定行尾

  \b 锚定词首和锚定词尾

  \> 锚定词尾

  <\ 锚定词首

    示例:<\root\>  //锚定单个单词

四、 分组

分组特性:默认状况下,Linux系统会分为分组指定变量,变量的表示形式\1 \2 \3……

abc* ->abcccccc   此时咱们须要把abc当作一个总体

\(\) 

示例:\(abc\)* -> abcabcabc

   \(ab+\(xy\)*\),其中\1=ab+\(xy\)*,\2=xy

3、练习

一、显示/proc/meminfo文件中大小写s开头的行

  grep -i "^s" /proc/meminfo

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

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

三、显示/etc/passwd文件中UID号最大的用户的用户名

  sort -n -t:-k3 /etc/passwd | tail -1 |cut -d:-f1

四、若是用户root存在,显示其默认的shell程序

  grep "^root\>" /etc/passwd &> /dev/null && grep "root\>" /etc/passwd |cut -d: -f7

  id root &> /dev/null && grep "^root\>" /etc/passwd |cut -d: -f7

五、找出/etc/passwd中的两位或三位数

  grep "[0-9]\{2,3\}" /etc/passwd

六、显示/etc/rc.d/rc/sysinit文件中,至少以一个空白字符开头的且后面为非空白字符的行

  grep "^[[:space:]]\+.*[^[:space:]]$" /etc/rc.d/rc.sysinit

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

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

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

  useradd bash

  useradd testbash

  useradd basher

  useradd -s /sbin/nologin nologin

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

相关文章
相关标签/搜索