0409正则grep

 

9.1 正则介绍_grep上
9.2 grep中
9.3 grep下

扩展
把一个目录下,过滤全部*.php文档中含有eval的行
grep -r --include="*.php" 'eval' /data/php

Linux 系统添加操做记录审计shell

mkdir -p /usr/local/domob/records/     //存放目录编程

chmod 777 /usr/local/domob/records/     //给权限bash

chmod +t /usr/local/domob/records/     //给t权限防止别人删除dom

vi /etc/profile 在最后添加下面的代码编程语言

if [ ! -d  /usr/local/domob/records/${LOGNAME} ] LOGNAME     //每一个用户的用户名,判断在不在 ,不在的话,建立spa

then.net

mkdir -p /usr/local/domob/records/${LOGNAME}3d

chmod 300 /usr/local/domob/records/${LOGNAME}日志

fi

export HISTORY_FILE="/usr/local/domob/records/${LOGNAME}/bash_history"     //自定义变量

export PROMPT_COMMAND='{ date "+%Y-%m-%d %T ##### $(who am i |awk "{print \$1\" \"\$2\" \"\$5}") #### $(history 1 | { read x cmd; echo "$cmd"; })"; } >>$HISTORY_FILE' 

 

 

 

 

http://blog.lishiming.net/?p=484 read讲解

 

扩展正则: + ? () {} | 使用的话要用grep -E 或者egrep

 

PROMPT_COMMAND="cd /tmp/"

每次执行cd以前,都会执行cd /tmp/

 

什么是正则

概念:它使用单个字符串来描述或匹配一系列符合某个句法则规则的字符串;
正则表示式一般用来检索和替换那些符合某个模式的文本内容。
不管是查找某个文档,仍是查询某个日志文件并分析其内容,都会用正则表示式。
正则就是一串有规则的字符串;
掌握好正则对于编写shell脚本有很大帮助;
各类编程语言中都有正则,原理是同样的。

命令格式:grep [-cinvrABC] 'word' filename

 -c 过滤出来的行数

-i  不区分大小写

-n 显示行号

-v  取反

-r  遍历全部的子目录

-A  后面跟一个数字,过滤出符合要求的行以及下面的n行; 列出包含关键词的行列出来,还会把如下的n行列出来。

-B 后面跟一个数字,过滤出符合要求的行及上面n行;

-C 后面跟一个数字,同时过滤出符合要求的行及上下各n行。 -E使其支持扩展正则,等同于egr

建立一个grep目录,拷贝过来一个文件/etc/passwd:

grep 'nologin' passwd  过滤nologin 并标红,grep --color=auto  有颜色显示

grep -c 'nologin' passwd        grep查看符合过滤结果的行数 -c

-n 显示包含nologin的行号

grep -ni 'nologin' passwd   -i不区分大小写

 grep -vni 'nologin' passwd   取反,把除了nologin的显示出来  -v

 grep -r 'root' /etc/    etc目录下全部包含root的文件

grep -r 'root' /etc/ > /tmp/grep.log  把过滤出的结果重定向到grep.log

grep passwd /tmp/grep.log   在过滤结果中,过滤passwd

grep -A2 'root' passwd        -A2 把包含root的行,还有这行下面的两行都列出来

-B2 把包含root的行和这行上面的两行都列出来

-C2把包含root的行和上下两行都列出来

 grep '[0-9]' passwd   查看文件里的0-9全部的数字,[] 方括号表示里面的任意一个字符

grep -vn '[0-9]' /etc/inittab   -v   把不包含0-9的行列出来

grep -n '^#' inittab  把以#开头的行列出来      ^ 以xxx开头

grep -nv '^#' inittab    把不以#开头的行列出来

 grep -v '^#' inittab 把#开头的行去掉

 grep '[^0-9]' inittab    过滤非0-9,只要不是数字,都符合要求,一个字符

grep '^[^0-9]'  inittab     ^已xxx开头,括号中已一个非数字的字符开头,过滤出非0-9开头的数字  ,^放到[] 方括号中,意味着方括号里的字符的取反,和放在外面不一样,外面是以xxx开头

grep -nv '^[^0-9]' inittab   取反,包含0-9开头的行  ,^放到[] 方括号中,意味着方括号里的字符的取反,和放在外面不一样,外面是以xxx开头

grep 'r.o' passwd   匹配r.o      . 表示任意一个字符,r.o表示r和o之间有一个任意字符的行过滤出来

 grep 'o*o' passwd

*号表示左边的字符,重复0到n次

grep '.*' passwd   任意个任意字符

grep 'user.*bash' passwd

grep 'o\{2\}' passwd   须要用\脱义,过滤出o出现两次的内容,只要有两个就会匹配出来

grep 'o\{0,3\}' passwd    从0到3的范围,用的不多

egrep 'o{2}' passwd  

grep -E 'o{2}' passwd     若是不加转译字符,可使用egrep 或grep -E

{}表示前面字符的重复范围  grep -E '(oo){2}' passwd   出现两次的oo

egrep 'o+b' passwd          +  过滤出一个或多个指定的字符

 egrep 'o?t' passwd   ?表示 ?前面的字符的重复次数0或1,有的时候是ot,没有的时候是t

| 或者,grep -E 'root|nologin' passwd   匹配root 或nologin

grep -Ei 'root|bus|81' passwd  能够写多个,用i不区分大小写

相关文章
相关标签/搜索