任务列表
9.1 正则介绍_grep上
9.2 grep中
9.3 grep下
9.1 正则介绍_grep上
9.1.1 什么是正则
- 正则就是一串有规律的字符串
- 掌握好正则对编写shell脚本有很大帮助
- 各种编程语言都有正则,原理是一样的。
9.1.2 用法
grep [选项] ‘关键字’ 文件
9.1.3 grep的选项
- -c 统计带有关键字内容的行数
- -i 不区分大小字
- -n 显示过滤出内容的行号
- -v 取反(反向选择过滤的内容)
- -r 对目录及其子目录进行操作,过滤复数个文件。
- -A 后边跟数字,表示过滤符合条件的行和之后的n行。
- -B 后边跟数字,表示过滤符合条件的行和之前的n行。
- -C 后边跟数字,表示过滤符合条件的行和之前之后的n行。(也就是同时包含AB)
9.1.4 grep/egrep示例
- grep ‘[0-9]’ /etc/passwd
表示[]方括号内任意一个字符是数字就附合要求。 - grep -v ‘[0-9]’ /etc/inittab
选取不包含数字的行 - grep ‘^#’ /etc/inittab
选取以#号开头的行,^表示以什么什么开头。 - grep '#KaTeX parse error: Expected 'EOF', got '#' at position 21: …c/inittab 选取以#̲号结尾的行。表示以什么什么结尾。
- grep ‘^[^0-9]’ /etc/inittab
方括号外面表示以什么什么开头,而在方括号里边表示取反。 - grep ‘r.o’ passwd
这里的点表示任意一个字符。(相当于通配里的问号) - grep ‘o*o’ passwd
正则里的星号表示匹配星号左边的字符重复零次或多次。 - grep ‘.*’ passwd
这个组合表示所有的字符和组合。 - grep ‘o\{2\}’ passwd
花括号的内容可以是一个范围,比如{1,3}表示1-3.意思是左边的符号出现了1至3次。 - 扩展正则符号:
{} () ? + | - 使用egrep 或者grep -E使用扩展正则符号时可以不使用脱义符。
- + 号表示左边的字符重复了一次或多次。
- ? 号表示左边的字符重复了零次或一次。
- | 表示或者,竖线左右取其一。
- () 小括号的内容是被认为是一个整体。
直播笔记
1,简易的审计系统
http://www.68idc.cn/help/server/linux/2014042190951.html
- 建立一个目录
mkdir -p /usr/local/domob/records/
chmod 777 /usr/local/domob/records/
chmod +t /usr/local/domob/records/ - vi /etc/profile 在最后添加下面的代码
if [ ! -d /usr/local/domob/records/${LOGNAME} ]
then
mkdir -p /usr/local/domob/records/${LOGNAME}
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'
2, 这个命令 history 1 | { read x cmd; echo “$cmd”; }的解释
http://blog.lishiming.net/?p=484
3, 正则表达式的几个核心关键词
. 任意一个或多个字符。和.*一起使用表示所有可能出现的字符。
* 不能单独存在,表示前边的字符重复了零次或多次。多个字符要用小括号括起来。
+ 前边的字符重复一次或多次。和星号的区别是个数。
? 前边的字符重复零次或一次。也是个数的问题。
() 表示里边的内容是一个整体
{} 表示一个范围,用{1,3}表示1-3.指定左边的字符重复的次数。
| 表示或者
[] 每次取其中的一个值,可以是一个范围[a-zA-Z]。多种范围之前没有间隔。
^ 在方括号外边是表示开头,方括号里边表示取反。
$ 以什么什么结尾的意思
\ 脱义符,使斜扛后边的字符变成字符串而不是运算符。
- grep -E 和egrep可以使用扩展正则