一、正则基础

  1. 正则里的特殊符号
    [:alnum:]代表英文大小写字母及数字
    [:alpha:]代表英文大小写字母
    [:blank:]代表空格和 tab 键
    [:cntrl:]键盘上的控制按键,如 CR,LF,TAB,DEL
    [:digit:]代表数字
    [:graph:]代表空白字符以外的其他
    [:lower:]小写字母
    [:print:]可以被打印出来的任何字符
    [:punct:]代表标点符号
    [:upper:]代表大写字符
    [:space:]任何会产生空白的字符如空格,tab,CR 等
    [:xdigit:]代表 16 进位的数字类型

例:查找大写字母 $ grep -n '[[:upper:]]' text.txt

2.语系对正则的影响

由于不同语系的编码数据不同,所以造成不同语系的数据选取结果有所差异。以英文大小写为例,zh_CN.big5 及 C 这两种语系差异如下:

LANG=C 时: 0 1 2 3 4....ABCDE...Zabcde...z

LANG=zh_CN 时:0 1 2 3 4...aAbBcCdD.....zZ

在使用正则表达式[A-Z]时, LANG=C 的情况下,找到的仅仅是大写字符 ABCD..Z。而在 LANG=zh_CN 情况下,会选取到 AbBcCdD.....zZ 字符。因此在使用正则表达式时要特别留意语系。一般使用C语系。

二、Grep

-a :将 binary 档案以 text 档案的方式搜寻数据

-c :计算找到 '搜寻字符串' 的次数

-i :忽略大小写的不同,所以大小写视为相同

-n :顺便输出行号

-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!

[abc] :表示“a”或“b”或“c”

[0-9] :表示 0~9 中任意一个数字,等价于[0123456789]

[\u4e00-\u9fa5] :表示任意一个汉字

a1< :表示除“a”、“1”、“<”外的其它任意一个字符

a-z :表示除小写字母外的任意一个字符

例:grep -n 't[ea]st' text.txt

行首符:^ 与行尾符: $

grep -n '^the' text.txt :找行首the开头的

grep -n 'd$' text.txt :找行尾d结尾的

^[A-Z] 表示以大写字母开头。

A-Z 表示除了大写字母 A-Z 的所有字符。

grep -n '^$' text.txt :查找空行

grep -v '^$' text.txt: 过滤空行

grep -v '^#' text.txt: 过滤注释

任意一个字符: " . "与重复字符 “ * ”

word$ 表示带搜寻的字符串(word)在行尾

.(小数点) 表示 1 个任意字符

\ 表示转义字符,在特殊字符前加\会将特殊字符意义去除

*表示重复 0 到无穷多个前一个 RE(正则表达式)字符

[list] 表示搜索含有 l,i,s,t 任意字符的字符串

[n1-n2] 表示搜索指定的字符串范围,例如0-9 [A-Z]等

list 表示反向字符串的范围,例如0-9表示非数字字符,A-Z表示非大写字符范围

{n,m} 表示找出 n 到 m 个前一个 RE 字符


扫描二维码,在手机上阅读!
最后由 BF 编辑于2018年03月14日 17:28