grep命令:
grep全称:Global Regular Expression Print,即全面搜索正则表达式并把行打印出来,通过参数-E可以使用egrep的功能
grep与egrep的区别:在于grep只支持基础正则表达式,而egrep可以支持扩展的正则表达式
常用用法:
[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename 选项与参数: -a :将 binary 文件以 text 文件的方式搜寻数据 -c :计算找到 '搜寻字符串' 的次数 -i :忽略大小写的不同,所以大小写视为相同 -n :顺便输出行号 -v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行! --color=auto :可以将找到的关键词部分加上颜色的显示喔!
高级参数:
-A:后面加数字,为after的意思,除了列出该行外,后续的n行也列出来 -B:后面加数字,为befer的意思,除了列出该行外,前面的n行也列出来 --color=auto:可将正确的那个选取数据列出颜色 例:[root@learning tmp]# grep -A2 -B2 "this" regular_express.txt apple is my favorite foody Football agame is not use feet only this dress doesn't fit me. go!go!let's go!!! 42500000491
sed命令:流编辑器,可以实现对文件的增删改查和替换
文件person.txt: 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO 1.-n:取消默认输出 p:打印 [root@learning test]# sed -n "2"p person.txt 102,zhangyao,CTO 【引号里面表示第几行,也可以是一个范围】 2.a:追加文本到指定行后(文件本身是没有修改的,数据不变,追加的只是显示出来的东西 ) i:追加文本到指定行前 [root@learning test]# sed "2a 106,dandan,CSO" person.txt 101,oldboy,CEO 102,zhangyao,CTO 106,dandan,CSO 103,Alex,COO 104,yy,CFO 105,feixue,CIO 3.d:删除行 [root@learning test]# sed "1d" person.txt 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO
4.c:用新行取代旧行
[root@learning test]# sed "3c 106,dandan,CSO" person.txt
101,oldboy,CEO
102,zhangyao,CTO
106,dandan,CSO
104,yy,CFO
105,feixue,CIO
5.s:将每一行中第一处匹配的字符进行替换
g:每一行进行全部替换==>sed命令s的替换标志之一,非sed命令
-i:修改文件内容
s#*#-#g:把*全部转换为-,*可以是正则表达式,-不可以[root@learning test]# sed "s#o#**#g" person.txt
101,**ldb**y,CEO
102,zhangya**,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@learning test]# sed "s#o#*" person.txt
sed: -e expression #1, char 5: unterminated `s' command
[root@learning test]# sed "s#o#*#" person.txt
101,*ldboy,CEO
102,zhangya*,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
正则表达式:
简单来说,正则表达式就是处理字符串的方法,以行为单位来进行字符串的处理行为;正则表达式通过一些特殊符号的辅助,让用户可以轻易达到查找,删除,替换某特定字符串的处理程序
^word | 搜索以word为行首的那一行 |
word$ | 搜索以word为行尾的一行 |
. |
代表且只能代表任意一个字符 |
\ |
转义符号 |
* | 表示重复0个或多个前面的字符(linux其他地方表示所有,例*.php,表示所有后缀名为php的文件) |
.* |
匹配所有字符 |
^.* |
以任意字符开头的内容 |
[word] | 匹配word中任意一个字符存在的行 |
[^word] |
匹配不包含^后任意字符的所有内容 |
\{n,m\} | 匹配前一个字符重复次数n到m次的前一行【\为转义符号,如果用egrep可以去掉斜线】 |
\{n,\} | 匹配前一个字符重复次数至少n次的前一行 |
\{n\} | 匹配前一个字符重复次数为n次的那一行 |
例1: [root@learning tmp]# grep "^th" regular_express.txt this dress doesn't fit me. 例2: [root@learning tmp]# grep "y$" regular_express.txt "open source" is a good mechanism to devolop programsy apple is my favorite foody 例3: [root@learning tmp]# grep "425.0" regular_express.txt 42500000491 425000491 例4: [root@learning tmp]# grep "\." regular_express.txt this dress doesn't fit me.【如果只是“.”,将会匹配全部】 例5: [root@learning tmp]# grep "4250*49" regular_express.txt 42500000491 425491 425000491 例6: [root@learning tmp]# grep [aeo] regular_express.txt "open source" is a good mechanism to devolop programsy apple is my favorite foody Football agame is not use feet only this dress doesn't fit me. go!go!let's go!!! 例7: [root@learning tmp]# grep '0\{3,\}' regular_express.txt 42500000491 425000491
扩展的正则表达式
+ |
表示重复一个或多个前面的字符 |
? | 0个或1个字符 |
| |
用或的方式查找多个符合的字符串 |
() | 找出”组”字符串(例如找出glad或glod两个字符串,grep 'g(la|lo)d' regular_express |
()+ | d多个重复组的判别 |