第八节——逻辑运算和正则表达式 本文共有34213个字,关键词: 逻辑运算: 0(true) 1(false) && 与运算 || 或运算 ! 非运算 短路运算: A&&B 当A为1(假),结果必定为假 当A为0(真),B必须要参与运算 A||B 当A为0(真),结果必定为真 当A为1(假),B必须要参与运算 linux上文本处理三剑客: #grep 文本过滤工具,基于模式(pattern),显示匹配的行 #sed 流编辑器,是一个文本编辑工具,行编辑器 #awk linux上实现的是gawk,awk也是一门单独的编程语言,也就是说,awk可以作为一个解释器,awk既不是用来编辑文本,也不是用来过滤文本,二是将文本进行美观输出,所以awk是一个文本报告生成器。 基本的正则表达式元字符: 字符匹配元字符: “.” 匹配任意单个字符 “[]” 匹配指定范围内的任意单个字符 “[^]” 匹配指定范围外的任意单个字符 [:lower:] 所有的小写字母 [:upper:] 所有的大写字母 [:alpha:] 所有的大小写字母 [:alnum:] 所有的字母和数字 [:punct:] 所有的特殊字符 [:space:] 空格字符 文本处理工具使用的模式应当使用引号包含起来: 双引号:弱引用,其中的变量会被替换 单引号:强引用,除了元字符,其他都当做字符处理。 次数匹配元字符:用在要指定次数的字符后面,用于指定前面字符出现的次数。 “*” 匹配前面的字符任意次,“*”本身仅表示次数 例:grep “a*b” filename 能匹配到的如下 /etc/fstab a出现一次 /boot a出现0次 即a*b表示的意义为,a出现0次、1次或多次 正则匹配默认工作在贪婪模式下,最大匹配原则。 “.*” 任意长度的任意字符。 “\?” 匹配其前面的字符0次或者1次,即前面的字符可有可无。 “\+” 匹配其前面的字符至少一次。 “\{m,n\}” 匹配其前面字符,至少m次,至多n次。 “\{m\}” 匹配前面的字符m次。 “\{0,n}\” 匹配前面的字符至多n次。 “\{m,}\” 匹配前面的字符至少m次。 位置锚定: ^:行首锚定,使用在最左侧。 $:行尾锚定,使用在最右侧。 ^PATTERN$:用模式匹配整行,匹配到为真,匹配不到为假。 “^$” 空行,none。 “^[[:space:]]*$” 空白行(没有可见字符)。 “\<” 词首锚定,用于单词的左侧。 “\b” 词首锚定 “\>” 词尾锚定,用于单词的右侧。 “\b” 词尾锚定 “\<PATTERN\>” 单词锚定,匹配整个单词 “\bPATTERN\b” 分组: “\(\)” 小括号在shell中有特殊意义,所以转义,将一段字符当作一个整体处理。 字符一旦分组以后,在所有的正则表达式当中还有第二个作用。 后项引用:引用前面分组括号中模式所匹配的字符,一旦一个模式匹配到衣蛾字符串了,在后面的任何位置我们都可以再次引用这个模式所匹配到的字符。 Tip:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名的方式为\1,\2,\3等等。\1表示从左侧起第一个左括号到与之匹配的右括号之间模式所匹配到的字符,此处允许嵌套,最里面的一对括号算最后一个。 egg:\(ab\+\(xy\)*\) \1 匹配 ab\+\(xy\)* \2 匹配 xy 我们在这里再次提示,后向引用的引用方式:引用的是前面分组括号中的模式所匹配到的字符,而非模式本身。 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 基础笔记二 2017-03-24 评论 2471 次浏览