正则表达式中grep,sed的用法(包括基本的正则表达式和扩展的正则表达式)

 

一 正则表达式  

  1. Basic REGEXP:基本正则表达式  

  2. Extended REGEXP:扩展正则表达式  

  3. (正则表达式是使得计算机变成智能化的重要途径)  

1.1 基本正则表达式

  1. . : 表示匹配任意单个字符   

  2. [] : 匹配指定范围内的任意单个字符  

  3. [^]: 匹配指定范围外的任意单个字符  

  4. 字符匹配  

  5. *:匹配其前面的字符任意次   

  6. \?:其前的字符是可有可无的  

  7. \{m,n\}:匹配其前的字符至少m次,至多n次  

  8. \{0,n\}:匹配其前的字符少为0次,至多n次  

  9. \{m,\} :匹配其前的字符至少m次,没有上限  

  10. .* :匹配其前面的任意长度的任意字符  

  11. 位置锚定锚定:  

  12. ^:锚定行首  

  13. $:锚定行尾  

  14. \<,\b:锚定词首  

  15. \>,\b:锚定词尾  

  16. \(\):锚定分组  

  17. \1,\2,\3,...:后向引用  

  18. grep:使用基本正则表达式定义的模式来过滤文本的命令;  

  19. -E : 使用扩展的正则表达式  

  20. -i :忽略字符大小写  

  21. -v :匹配到的字符串不显示  

  22. -o :只显示匹配到的字符串  

  23. --color:显示匹配到的颜色  

  24. -A #:显示匹配到的行及其后的行 eg:grep --color -A 2'^core id' /proc/cpuinfo 显示core id行及其后面的两行  

  25. -B #:显示匹配到的行及其前的行 eg:grep --color -A 2'^core id' /proc/cpuinfo 显示core id行及其前面的两行  

  26. -C #:显示匹配到的行及其前后的行 eg:grep --color -C 2'^core id' /proc/cpuinfo 上下都两行,表示上下文  

1.2 扩展正则表达式 

  1. 字符匹配:  

  2. . : 表示匹任意单个字符   

  3. [] : 匹配指定范围内的任意单个字符  

  4. [^]: 匹配指定范围外的任意单个字符  

  5. 次数匹配:  

  6. * :匹配其前面的字符任意次   

  7. ? : 匹配其前的字符是可有可无的  

  8. + :匹配其前面的字符至少一次  

  9. {m,n}:匹配其前的字符至少m次,至多n次  

  10. 位置锚定:  

  11. ^:锚定行首  

  12. $:锚定行尾  

  13. \< , \b :锚定词首  

  14. \> , \b :锚定词尾  

  15. 分组:(扩展正则表达式中才真正实现分组的意义)  

  16. ():分组  

  17. \1,\2,\3,...  

  18. 扩展正则表达式还支持一个特殊的字符:或者  

  19. | :or  

  20. C|cat:表示C或cat eg: grep --color -E 'C|cat' test1.txt  

  21. (C|c)at: 表示Cat或cat eg: grep --color -E '(C|c)at' test1.txt   

  22. eg:grep --color -E'^[[:space:]]+' /boot/grub/grub.conf 引用至少一次空白字符开头的行  

  23. grep -E = egrep (二者表达的意义相同)  

1.3 实例分析

  1. 找出/boot/grub/brug.conf文件中的1-255之间的数字  

  2. eg: egrep --color '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>' /boot/grub/brug.conf  

  3. eg:ifconfig | egrep --color '(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'   

  4. eg:ifconfig | egrep '\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'   

  5. 找出ifconfig命令中1-255之间的数字执行结果的IP地址  

  6. eg:ifconfig | egrep --color '(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'   

  7. eg:ifconfig | egrep -o '(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>' 只显示匹配到的串本身  

  8. 精确找出ifconfig命令中1-255之间的数字执行结果中的IP地址  

  9. eg: egrep --color '\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3]\>(\.<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>){2}\.\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5)\>'  

  10. IPv4:(A,B,C,D,E)  

  11. A:1-127  

  12. B: 128-191  

  13. C: 192-223  

  14. fgrep(fast grep 快速搜索grep):不支持正则表达式  

二 sed的基本用法  

2.1 sed:Stream EDitor行编辑器,只适合编辑纯ASSIC码的文本,实现逐行处理文本(全屏编辑器:vi)  

  1. sed:模式空间(内存空间)  

  2. 默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕;  

  3. sed [options] ’AddressCommand' file...对这个或这些文件当中的符合这个地址指定范围内行执行以上编辑命令  

  4. -n:静默模式,不再默认显示模式空间中的内容  

  5. -e SCRIPT -e SCRIPT:可以同时指定多个脚本  

  6. -i:直接修改原文件  

  7. -f /PATH/TO/SED_SCRIPT  

  8. sed -f /path/to/scripts file  

  9. -r :表示使用扩展正则表达式  

  10. eg :history |sed 's#[[:space:]]##g'查找空白字符替换成什么也没有,删除空白字符  

  11. eg :histpry |sed 'S#[[:space:]]##g'查找空白字符,把空白字符替换成什么也没有  

  12. eg :history |sed 's#^[[:space:]]##g'查找行首的空白字符,把行首的空白字符替换成什么也没有  

  13. eg :history |sed 's#^[[:space:]]*##g' | cut -d' ' f1 查找行首的空白字符,把行首的空白字符替换成什么也没有  

2.2 Address(地址指令方法)

  1. 1、StartLine,EndLine(从起始行到结束行用“,"隔开)  

  2. 比如1,100   1到100行  

  3. $ :倒数第一行  

  4. $-1:倒数第二行  

  5. 2、/RegExp/ 使用正则表达式指定模式  

  6. eg:/^root/ 以root字符串开头的行  

  7. 3、/pattern1/,/pattern2/  

  8. 第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行  

  9. 4、LineNumber  

  10. 指定的行(精确到某行)  

  11. 5、StartLine,+N  

  12. 从StartLine(指定的行)开始,向后的N行  

  13. 2.3 Command   

  14. d : 删除符合条件的行  

  15.  eg:sed ‘1d' /etc/fstab 只删除第1行  

  16.  eg:sed ‘1,2d' /etc/fstab 删除第1,2行  

  17.  eg: sed ‘1,$-1d' /etc/fstab 删除第1行到倒数第2行  

  18.  eg:sed ‘1,+2d' /etc/fstab 删除3行  

  19.  eg:sed ‘/oot/d' /etc/fstab 删除指定文件中包含oot的行  

  20.  eg:sed '/^\//d' /etc/fstab 删除文件中以”/"开头的行  

  21. p : 显示符合条件的  

  22.  eg:sed '/^\//p' /etc/fstab 显示文件中以”/"开头的行  

  23. a \string:在指定的行后面追加新行,内容为string  

  24.  eg :sed '/^\//a \# hello word' /etc/fstab  

  25. \n:可用于换行  

  26.  eg:sed '/^\//a \# hello word\n# hello,linux' /etc/fstab  

  27. i \string:在指定的行前面添加新行,内容为string  

  28. r FILE :将指定的文件的内容添加至符合条件的行数  

  29.  eg:sed '2r /etc/issue' /etc/fstab 把文件内容添加到第二行  

  30.  eg:sed '1,2r /etc/issue' /etc/fstab 把文件内容添加到第一行和第二行后面  

  31. w FILE:将地址指定的范围内的行另存至指定的文件中  

  32. eg:sed '/oot/w /tmp/oot.txt' /etc/fstab 把oot保存至tmp文件下  

  33. s/pattern/string/修饰符:查找并替换,默认只替换每行中第一次被模式匹配到的字符串  

  34. eg:sed ’s/oot/OOT' /etc/fstab 把指定文件中的oot换成OOT   

  35. 如果想每一行当中所有出现过的都替换要加修饰符;  

  36. 加修饰符  

  37. g :全局替换  

  38. i :忽略字符大小写  

  39. s///:s### ,s@@@  

  40. \(\),\1,\2  

  41. &:引用模式匹配到的整个串  

  42.  eg :sed 's@/@#@g' /etc/fstab  

  43.  eg: nano sed.txt  

  44.     hello,like  

  45.     hi,my love.  

  46.    sed 's#l..e#&r#g' sed.txt 把以l开头e结尾的字符串后面加上r 或写为 sed 's#\(l..e\)#\lr#g' sed.txt   

  47.    sed 's#l\(..e)#L\l#g' sed.txt 把l..e中的l换成L  

你可能感兴趣的:(正则表达式,grep,sed)