鸟哥的Linux私房菜——正则表达式
正则表达式
正则表达式可以说是非常重要了,已经为值得单独学习的一个知识点,不过正则涉及到的知识点很多,这里只提到常用的一些,如果想了解更多,可以去专门学习正则的网址学习。
常用语法
1.语系的影响:
不同语系的编码规则不一样,在使用诸如[a-z]时就会产生歧义,所以要注意当前所使用的编码规则。
为了更好的统一,提出了一些特殊符号:
[:alnum:]:代表英文大小写字母及数字,即0-9,A-Z,a-z。
[:alpha:]:代表英文大小写字符,A-Z,a-z。
[:blank:]:代表空格键和[Tab]。
[:cntrl:]:代表键盘上面的控制按键,例如CR,LF,Tab等等。
[:digit:]:代表数字而已 0-9.
[:graph:]:除了空格键之外的所有按键
[:lower]:代表小写按键 a-z
[:print:]:代表可以打印出来的所有字符。
[:punct:]:代表标点符号
[:upper:]:代表大写字符
[:space:]:代表任何会产生空白的字符
[:xdigit:]:代表16进位的数字类型
2:grep进阶:
之前已经介绍过,grep使用来搜寻我们所需要的内容,结合管线命令能达到很强的效果,再结合正则表达式,更是如虎添翼。
例子:
1.搜寻特定字符串:
搜寻:grep -n ‘string’ filename
反向搜寻:grep -vn ‘string’ filename
2.利用[]来搜寻集合字符:
[]中无论有几个字符仅代表其中一个字符。
例如w[abc]z,可以是waz,wbz,wcz.
也可以反向选择[^abc],表示不选择awz,bwz,cwz
所有的大写字符可以为[A-Z],类似的还有[a-z],[0-9]等等,如果为了更加保险可以使用上面提到过的[:lower:]等等。
grep -n ‘[0-9]’ filename
grep -n ‘[[:digit:]]’ filename
3. 行首和行尾字符:
'^'这个字符,放在[]内表示取反,而放在外面表示一行的开头。
‘KaTeX parse error: Expected group after '^' at position 161: …
空字符串的表示方式还有“ ^̲ ”
4.{}限定字符范围
但是因为{ 与 }在shell中有特殊意义,所以需要转换字符‘\’来表示
{m,n}表示前一个字符重复 m-n次。
语法汇总
^word: 待搜寻的字符串在行首
word$: 待搜寻额的字符串在行尾
.: 代表一定有一个任意字符
\:转义字符
*:重复前一个字符0-无穷次
[n1-n2]/[list]: 包含有List中的一个字符
[^list]:包含List之外的一个任意字符
{n,m }:连续前一个字符n-m次
+:重复一个或一个以上的前一个字符
?:重复前一个字符0或一次
|: 利用或(or)的方式找出字符串
():找出群组字符串
()+:多个字符群组
‘ w(oo|bb)z’ 代表 wooz或者wbbz。
结合Linux中的工具使用正则
查询和修改文件内容——sed:
格式化打印——pirintf:
文件对比工具——diff: