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不区分大小写