关于grep的使用以及正则表达式
一、正则表达式 简单地说,正则表达式就是处理字符串的方法,它以行为单位来进行字符串的处理行为,通过一些特殊的符号的辅助,可以让用户轻易打到查找、删除、替换某特定字符串的处理程序。这些特殊字符称为元字符,其不表示字符本身的意义,用于额外功能性的描述。正则表达式又分为基础正则与扩展正则。 1)基础正则表达式 元字符: .: 匹配任意单个字符 [char]: 匹配指定范围内的任意单个字符 [^char]:匹配指定范围外的任意单个字符 字符集合: [:digit:],[:lower:],[:upper:],[:punct:],[:space:],[:alpha:],[:alnum:] 匹配次数(贪婪模式):
*: 匹配其前面的字符任意次+:匹配其前面的字符至少一次 .*: 任意长度的任意字符 ?: 匹配其前面的字符1次或0次 {m,n}:匹配其前面的字符至少m次,至多n次 位置锚定:指定字符出现位置 ^: 锚定行首,此字符后面的任意内容必须出现在行首 $: 锚定行尾,此字符前面的任意内容必须出现在行尾 ^$: 空白行 &;或b: 锚定词首,其后面的任意字符必须作为单词首部出现 &;或b: 锚定词尾,其前面的任意字符必须作为单词尾部出现 分组: ( ) 如:(ab)*,将ab最为一个整体匹配 n:后向引用,引用前面的第n个左括号以及与之对应的右括号中的模式所匹配到的内容 2)扩展正则表达式 扩展正则表达式,与基本正则表达式的不同在于其不再需要转译,增加了“|”这个命令。这里仅介绍其不同之处。 +: 匹配其前面的字符至少1次 ?: 匹配其前面的字符1次或0次 {m,n}:匹配其前面的字符至少m次,至多n次 (): 分组 a|b: a或者b 二、grep的使用 作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;其基本格式为 grep [OPTIONS] PATTERN [FILE...] [OPTIONS]: 其主要选项有 -i:忽略大小写--color=auto: 对匹配到的文本着色显示; -v:显示没有被模式匹配到的行-o:只显示被模式匹配到的字符串 -E:使用扩展正则表达式 -q: 静默模式,不输出任何信息; -A #:after,后#行 -B #: before,前#行 -C #:context,前后各#行 PATTERN:由正则表达式字符及文本字符所编写的过滤条件 由于grep同胞的另外两个命令,egrep相当于 grep -E,fgrep不支持正则表达式,这里就不再说明 三、实例 1、显示/proc/meminfo文件中以大小s开头的行; [root@mylinux~]#grep-i--color=auto"^s"/proc/meminfo SwapCached:0kB SwapTotal:0kB SwapFree:0kB Shmem:180kB Slab:68012kB SReclaimable:48860kB SUnreclaim:19152kB 2、显示/etc/passwd文件中不以/bin/bash结尾的行; [root@mylinux~]#grep-v--color=auto"/bin/bash$"/etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt 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 games:x:12:100:games:/usr/games:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin vcsa:x:69:69:virtualconsolememoryowner:/dev:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin saslauth:x:499:76:"Saslauthduser":/var/empty/saslauth:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin dbus:x:81:81:Systemmessagebus:/:/sbin/nologin apache:x:48:48:Apache:/var/www:/sbin/nologin haldaemon:x:68:68:HALdaemon:/:/sbin/nologin mysql:x:498:499::/home/mysql:/sbin/nologin 3、显示/etc/passwd文件中ID号最大的用户的用户名; [root@mylinux~]#sort-n-t:-k3/etc/passwd|tail-1|cut-d:-f1 mylinux 4、如果用户root存在,显示其默认的shell程序; [root@mylinux~]#idroot&>/dev/null&&grep"^root&;"/etc/passwd|cut-d:-f7 /bin/bash 5、找出/etc/passwd中的两位或三位数; [root@mylinux~]#grep-E--color=auto"&;[0-9]{2,3}&;"/etc/passwd 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 games:x:12:100:games:/usr/games:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin vcsa:x:69:69:virtualconsolememoryowner:/dev:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin saslauth:x:499:76:"Saslauthduser":/var/empty/saslauth:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin dbus:x:81:81:Systemmessagebus:/:/sbin/nologin apache:x:48:48:Apache:/var/www:/sbin/nologin haldaemon:x:68:68:HALdaemon:/:/sbin/nologin mysql:x:498:499::/home/mysql:/sbin/nologin mylinux:x:500:500::/home/mylinux:/bin/bash 6、显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存非空白字符的行; grep-E--color=auto"^[[:space:]]{1,}[[:space:]]"/etc/rc.d/rc.sysinit 7、找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行; [root@mylinux~]#netstat-tan|grep-E--color=auto"LISTEN[[:space:]]*$" tcp000.0.0.0:33060.0.0.0:*LISTEN tcp000.0.0.0:59010.0.0.0:*LISTEN tcp000.0.0.0:60010.0.0.0:*LISTEN tcp000.0.0.0:220.0.0.0:*LISTEN tcp00127.0.0.1:250.0.0.0:*LISTEN 8、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行; [root@mylinux~]#grep-E--color=auto"(^.*):.*/1$"/etc/passwd sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt bash:x:501:501::/home/bash:/bin/bash 9、写一个模式,能匹配真正意义上的IP地址;(1.0.0.1--223.255.255.254) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |