正则表达式与grep
文本编辑工具grep:是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来; sed :是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用; awk :是一种编程语言,用于在linux/unix下对文本和数据进行处理; grep使用grep [OPTION] PATTERN [FILE…] grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…] 选项: ?Ccolor=auto:自动加颜色; -i :ignorecase,忽略字符大小写; -o :仅显示匹配道德字符串本身; -v :?Cinvert-match:显示不能被模式匹配到的行; -E :支持使用扩展的正则表达式元字符; -q :不输出任何信息; -A<显示列数>:除了显示符合范本样式的那一行之外,并显示该行之后的内容; -B<显示列数>:在显示符合范本样式的那一行之外,并显示该行之前的内容; -C<显示列数>:除了显示符合范本样式的那一列之外,并显示该列之前后的内容; 正则表达式
正则表达式,又称规则表达式。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表达式元字符(1)字符匹配: . :匹配任意单个字符; [] :匹配指定范围内的任意单个字符; [^] :匹配指定范围外的任意单个字符; (2)匹配次数: * :匹配其前面的字符任意次; .* :匹配任意长度的任意字符; ? :匹配其前面的字符至多1次; + :匹配其前面的字符至少1次; {m} :匹配其前面的字符m次; {m,n} :匹配其前面的字符至少m次,至多n次; {0,n} :匹配其前面的字符至多n次; (3)位置锚定: ^ :行首锚定; $ :行尾锚定; ^PATTERN$ :用PATTERN来匹配整行; ^$ :匹配空白行; ^[[:space:]]*$ :包含空白字符的行或空行; 单词:非特殊字符组成的连续字符; &;或<b :词首锚定; &;或b :词尾锚定; &;PATTERN&; :匹配完整单词; (4)分组及引用: () :将一个或多个字符当作一个整体;分组括号中的内容会被记录于内部变量中,可作为引用; 后向引用: 1 :引用第一个括号中匹配到的字符; 2 :引用第二个括号中匹配到的字符; … … 示例1.显示当前系统上root、fedora或user1用户的默认shell; #less/etc/passwd|egrep"^(root|fedora|user1)&;"|cut-d:-f1,7 root:/bin/bash user1:/bin/bash fedora:/bin/bash 或 #less/etc/passwd|grep"^(root|fedora|user1)&;"|cut-d:-f1,7 root:/bin/bash user1:/bin/bash fedora:/bin/bash 2.找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello(); #egrep"&;[[:alnum:]]+()"/etc/rc.d/init.d/functions checkpid(){ daemon(){ killproc(){ pidfileofproc(){ pidofproc(){ status(){ success(){ failure(){ passed(){ warning(){ action(){ strstr(){
3.使用echo命令输出一个绝对路径,使用grep取出其基名; 扩展:取出其路径名; #echo"/var/log/cron"|egrep-o"[^/]+/?$" #echo"/var/log/cron"|egrep-o"^(/[^/]+)+/$" 4.找出ifconfig命令结果中的1-255之间数字; #ifconfig|egrep-o"[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]" 5.挑战题:写一个模式,能匹配合理的IP地址; #ifconfig|egrep-o"(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" 6.挑战题:写一个模式,能匹配出所有的邮件地址; #egrep-o"[[:alnum:]]+@[[:alnum:]]+.[[:alnum:]]" 7.查找/var目录下属主为root,且属组为mail的所有文件或目录; #find/var-userroot-a-groupmail 8.查找当前系统上没有属主或属组的文件; 进一步:查找当前系统上没有属主或属组,且最近3天内曾被访问过的文件或目录; #find/-nouser-o-nogroup #find/(-nouser-o-nogroup)-atime-3 9.查找/etc目录下所有用户都有写权限的文件; #find/etc-perm-222 10.查找/etc目录下大于1M,且类型为普通文件的所有文件; #find/etc/-size+1M-typef-execls-lh{} 11.查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的文件; #find/etc/init.d/-perm-113-typef 12.查找/usr目录下不属于root、bin或hadoop的文件; #find/usr/-not(-userroot-o-userbin-o-userhadoop) 13.查找/etc/目录下至少有一类用户没有写权限的文件; #find/etc/-not-perm-222 14.查找/etc目录下最近一周内其内容被修改过,且不属于root或hadoop的文件; #find/etc-mtime-7-a-not(-userroot-o-userhadoop) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |