正则表达式(1)
正则表达式是计算机科学中的一个重要概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器中,正则表达式通常被用来检索、替换符合某个模式的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。(grep、sed、awk) 为什么要学习正则表达式? 在工作中,我们做Linux运维工作,时刻面对着大量的日志、程序、命令的输出。迫切的需要过滤我们需要的一部分内容,甚至是一个字符串。 一、grep(grep全称Global Regular Print) 1、作用 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep,表示全局正则表达式版本,它的权限是所有用户。 2、格式 grep [选项] 正则表达式 [文件] 3、常用选项 -c 只输出匹配行的计数; -i 不区分大小写(只适用于单字符); -h 查询多文件时不显示文件名; -l 查询多文件时只输出包含匹配字符的文件名; -L 只显示不包含匹配模板的行的文件名清单; -n 显示匹配行及行号; -s 不显示不存在或无匹配文本的错误信息; -n 在每一行前面打印改行在文件中的行数; -v 显示不包含匹配文本的所有行; -w 只显示完整单词的匹配; -x 只显示完整行的匹配; -r/-R如果文件参数是目录 ,该选项将搜做该目录下的所有子目录和文件。 4、元素符号集 grep* (过滤) 过滤一般都是用"" '' 引号引起来 ^lucky 表示搜索以lucky开头的内容; lucky$ 表示搜索以lucky结尾的内容; ^$ 表示空行,不是空格;(起排除空行作用) . 代表且只能代表任意一个字符;(当前目录,加载文件) 转义字符,让有着特殊身份意义的字符,脱掉马甲,还原原形 例如:.只表示小数点,还原原始小数点的意义; * 重复0个或者多个前面一个字符。不代表所有了。 .* 匹配所有的字符;(^.* 代表任意多个字符开头) ^* 任意多个字符开头; [abc] 匹配suoyou的字符合内任意一个字符[a-z],[a-z]代表匹配a-z内的任意字母; [^adc] ^再中括号里表示非,不包括a或b或c,^在括号里表示“非” {n,m} 重复n到m次,前一个字符; {n} n次;{0,m} 至多m次,少了不限。 注意:grep 要对{转义} {},egrep 不需要转义。 grep过滤字符串 [root@localhost ~]# cat 111.txt #编辑一个普通文件用来测试 111 123 321 例1 用grep过滤111.txt文件里的内容“111”。不定义变量。看一下用双引号和单引号的效果? [root@localhost ~]# grep "111" 111.txt 111 [root@localhost ~]# grep '111' 111.txt 111 [root@localhost ~]# grep 111 111.txt 111 答案:用双引号和单引号的的效果相同。 例2 用grep过滤111.txt文件里的内容以1开头的字符串。看一下用双引号和单引号的效果? [root@localhost ~]# grep '^1' 111.txt 111 123 [root@localhost ~]# grep "^1" 111.txt 111 123 [root@localhost ~]# grep ^1 111.txt 111 123 答案:用双引号和单引号的的效果相同。 提示:由以上可得用grep过滤加不加引号输出结果都是一样的。至于为什么要加上引号我也不知道 扩展:egrep作用是在文件中查找指定的字符串。egrep执行效果如grep -E,使用语法及参数可参照grep指令,egrep与grep不同点解读字符串的方法。 [root@localhost ~]# egrep ^1 111.txt 111 123 [root@localhost ~]# grep -e ^1 111.txt 111 123 曾经有一份真挚的爱情摆在我面前,但我没有珍惜,等到了失去的时候才后悔莫及,尘世间最痛苦的事莫过于此“我爱你”。 我爱你,我不确定你会不会用grep搜索和过滤,我唯一可以确定的是不管你搜索过滤多少次,我都不会让你失望。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |