文本处理工具

    xiaoxiao2023-10-17  155

    Linux文本处理之一 grep:文本过滤(模式:pattern)工具 grep, egrep, fgrep(不支持正则表达式搜索) grep grep: Global search REgular expression and Print out the line 作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检 查;打印匹配到的行 模式:由正则表达式字符及文本字符所编写的过滤条件 grep [OPTIONS] PATTERN [FILE…] grep root /etc/passwd grep " U S E R " / e t c / p a s s w d g r e p ′ USER" /etc/passwd grep ' USER"/etc/passwdgrepUSER’ /etc/passwd grep whoami /etc/passwd grep命令选项 –color=auto: 对匹配到的文本着色显示 -m # 匹配#次后停止 -v 显示不被pattern匹配到的行 -i 忽略字符大小写 -n 显示匹配的行号 -c 统计匹配的行数 -o 仅显示匹配到的字符串 -q 静默模式,不输出任何信息 -A # after, 后#行 -B # before, 前#行 -C # context, 前后各#行 -e 实现多个选项间的逻辑or关系 grep –e ‘cat ’ -e ‘dog’ file -w 匹配整个单词 -E 使用ERE -F 相当于fgrep,不支持正则表达式 -f file 根据模式文件处理

    正则表达式 含义:它是由一类特殊字符及文本字符所编写的模式, 其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能 正则表达式分两类: 基本正则表达式:BRE 扩展正则表达式:ERE grep -E, egrep 正则表达式引擎: 采用不同算法,检查处理正则表达式的软件模块 PCRE(Perl Compatible Regular Expressions) 元字符分类:字符匹配、匹配次数、位置锚定、分组 man 7 regex 基本正则表达式元字符 字符匹配: .匹配任意单个字符 [] 匹配指定范围内的任意单个字符,示例:[wang] [0-9] [a-z] [a-zA-Z] [^] 匹配指定范围外的任意单个字符 [:alnum:] 字母和数字 [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z [:lower:] 小写字母 [:upper:] 大写字母 [:blank:] 空白字符(空格和制表符) [:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广) [:cntrl:] 不可打印的控制字符(退格、删除、警铃…) [:digit:] 十进制数字 [:xdigit:]十六进制数字 [:graph:] 可打印的非空白字符 [:print:] 可打印字符 [:punct:] 标点符号 正则表达式 匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数 匹配前面的字符任意次,包括0次 贪婪模式:尽可能长的匹配 .* 任意长度的任意字符 ? 匹配其前面的字符0或1次 + 匹配其前面的字符至少1次 {n} 匹配前面的字符n次 {m,n} 匹配前面的字符至少m次,至多n次 {,n} 匹配前面的字符至多n次 {n,} 匹配前面的字符至少n次 正则表达式 位置锚定:定位出现的位置 ^ 行首锚定,用于模式的最左侧 $ 行尾锚定,用于模式的最右侧 ^PATTERN$ 用于模式匹配整行 ^$ 空行 1$ 空白行 < 或 \b 词首锚定,用于单词模式的左侧 > 或 \b 词尾锚定,用于单词模式的右侧 <PATTERN> 匹配整个单词 正则表达式 分组:() 将一个或多个字符捆绑在一起,当作一个整体处理,如:(root)+ 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些 变量的命名方式为: \1, \2, \3, … \1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符 示例: (string1(string2)) \1 :string1(string2) \2 :string2 后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身 或者:| 示例:a|b a或b C|cat C或cat (C|c)at Cat或cat 正则表达式元字符的定义 元字符 定义 ^ 行首 $ 行尾 . 任意单一字符 [] []内任意单一字符 [^] 除[]内任意单一字符 * 前面字符重复不确定次数 + +前面字符重复一次以上不确定次数 ? ?前面字符重复0或1次 \ 转义符 . 任意长度字符 {n} 前面字符重复n次 {n,} 前面字符重复n次以上 {m,n} 前面字符重复m次和n次之间 [:alnum:] 字母和数字 [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-[:lower:] 小写字母 [:upper:] 大写字母 [:blank:] 水平空白字符(空格和制表符) [:space:] 所有水平和垂直的空白字符(比[:blank:]包含的范围广) [:cntrl:] 不可打印的控制字符(退格、删除、警铃…) [:digit:] 十进制数字 [:graph:] 可打印的非空白字符 [:print:] 可打印字符 [:punct:] 标点符号 [:xdigit:] 十六进制数字

    扩展正则表达式egrep egrep = grep -E egrep [OPTIONS] PATTERN [FILE…] 扩展正则表达式的元字符: 字符匹配: . 任意单个字符 [] 指定范围的字符 [^] 不在指定范围的字符 次数匹配:

    匹配前面字符任意次 ? 0或1次 1次或多次 {m} 匹配m次 {m,n} 至少m,至多n次 位置锚定: ^ 行首 $ 行尾 <, \b 语首 >, \b 语尾 分组: () 后向引用:\1, \2, … 或者: a|b a或b C|cat C或cat (C|c)at Cat或cat

    [:space:] ↩︎

    最新回复(0)