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

前端之家收集整理的这篇文章主要介绍了正则表达式中grep,sed的用法(包括基本的正则表达式和扩展的正则表达式)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一正则表达式

@H_404_7@
  • BasicREGEXP:基本正则表达式

  • ExtendedREGEXP:扩展正则表达式

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

  • 1.1基本正则表达式

    @H_404_7@
  • .:表示匹配任意单个字符

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

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

  • 字符匹配

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

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

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

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

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

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

  • 位置锚定锚定:

  • ^:锚定行首

  • $:锚定行尾

  • \<,\b:锚定词首

  • \>,\b:锚定词尾

  • \(\):锚定分组

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

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

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

  • -i:忽略字符大小写

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

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

  • --color:显示匹配到的颜色

  • -A#:显示匹配到的行及其后的行eg:grep--color-A2'^coreid'/proc/cpuinfo显示coreid行及其后面的两行

  • -B#:显示匹配到的行及其前的行eg:grep--color-A2'^coreid'/proc/cpuinfo显示coreid行及其前面的两行

  • -C#:显示匹配到的行及其前后的行eg:grep--color-C2'^coreid'/proc/cpuinfo上下都两行,表示上下文

  • 1.2扩展正则表达式

    @H_404_7@
  • 字符匹配:

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

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

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

  • 次数匹配:

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

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

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

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

  • 位置锚定:

  • ^:锚定行首

  • $:锚定行尾

  • \<,\b:锚定词首

  • \>,\b:锚定词尾

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

  • ():分组

  • \1,...

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

  • |:or

  • C|cat:表示C或categ:grep--color-E'C|cat'test1.txt

  • (C|c)at:表示Cat或categ:grep--color-E'(C|c)at'test1.txt

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

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

  • 1.3实例分析

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

  • 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

  • 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])\>'

  • 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])\>'

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

  • 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])\>'

  • 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])\>'只显示匹配到的串本身

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

  • 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)\>'

  • IPv4:(A,B,C,D,E)

  • A:1-127

  • B:128-191

  • C:192-223

  • fgrep(fastgrep快速搜索grep):不支持正则表达式

  • 二sed的基本用法

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

    @H_404_7@
  • sed:模式空间(内存空间)

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

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

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

  • -eSCRIPT-eSCRIPT:可以同时指定多个脚本

  • -i:直接修改文件

  • -f/PATH/TO/SED_SCRIPT

  • sed-f/path/to/scriptsfile

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

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

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

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

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

  • 2.2Address(地址指令方法

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

  • 比如1,1001到100行

  • $:倒数第一行

  • $-1:倒数第二行

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

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

  • 3、/pattern1/,/pattern2/

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

  • 4、LineNumber

  • 指定的行(精确到某行)

  • 5、StartLine,+N

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

  • 2.3Command

  • d:删除符合条件的行

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

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

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

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

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

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

  • p:显示符合条件的

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

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

  • eg:sed'/^\//a\#helloword'/etc/fstab

  • \n:可用于换行

  • eg:sed'/^\//a\#helloword\n#hello,linux'/etc/fstab

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

  • rFILE:将指定的文件内容添加至符合条件的行数

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

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

  • wFILE:将地址指定的范围内的行另存至指定的文件

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

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

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

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

  • 加修饰符

  • g:全局替换

  • i:忽略字符大小写

  • s///:s###,s@@@

  • \(\),\1,\2

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

  • eg:sed's@/@#@g'/etc/fstab

  • eg:nanosed.txt

  • hello,like

  • hi,mylove.

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

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

  • 猜你在找的正则表达式相关文章