linux上文本处理上剑客:
grep:文本过滤工具(模式:pattern)工具; grep:基本正则表达式, -E -F egrep:扩展正则表达式,-G -F fgrep: 不支持正则表达式, sed:stream editor.流编辑器;文本编辑工具; awk:linux上的实现为gawk,文本报告生成器(格式化文本); 正则表达式: 由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于 表示控制或通配的功能; 分两类: 基本正则表达式:BRE 扩展正则表达式:ERE 元字符: \(hello[[:space:]]\+\)\+
grep:global search Regular expresslon and print out the line.
作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配 检查;打印报表到的行; 模式:由正则表达式的元字符及文本字符所编写出的过滤条件; 正则表达式引擎: grep [options] PATTERN [FILE...] grep [options] [-e PATTERN | -f FILE] [FILE...] 选项: grep='grep --color=auto' -i:忽略字符的大小写; -o:只输出文件中匹配到的部分 -v:反转查找 -E:支持使用扩展的正则表达式元字符; -q: --quiet, --silent;静默模式,即不输出任何信息; -A#:after,后#行 -B#:before,前#行 -C#:context,前后各#行
实例:
显示/etc/passwd文件中root的后两行
显示/etc/passwd文件中root的前后两行
基本正则表达式元字符:
字符匹配: . :匹配任意单个字符; [] :匹配指定范围内的任意单个字符; [^] :匹配指定范围外的任意单个字符; [a-z],[A-Z],[0-9],[a-z0-9] [[:upper:]] :所有大写字母 [[:lower:]]:所有小写字母 [[:alpha:]]:所有字母 [[:digit:]]:所有数字 [[:alnum:]]:所有数字和字母 [[:space:]]:所有空白字符 [[:punct:]]:所有标点符号 [^]: 匹配指定范围外的任意单个字符 [^[:upper:]] [^0-9] [^[:alnum:]]
匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式; *:匹配其前面的字符任意次;0,1,多次; .* :匹配任意长度的任意字符; \? :匹配其前面的字符 0 次或 1 次;即其前面的字符是可有可无的; \+ :匹配其前面的字符 1 次或多次;即其前面的字符要出现 \{m\}:匹配其前面的字符 m次; \{m,n\}:匹配其前面的字符至少 m次,至多 n 次; \{0,n}:至多 n 次; \{m,\}:至少 m次;
位置锚定:
^:行首锚定:用于模式的最左侧;
$:行尾锚定:用于模式的最右侧;
^PATTERN$:用于PATTERN来匹配整行;
^$ :空白行;
^[[:space:]]*$: 空行或包含空白字符的行;
单词:非特殊字符组成的连续字符(字符串)都称为单词; \<或\b :词首锚定,用于单词模式的左侧; \>或\b :词尾锚定,用于单词模式的右侧; \:匹配完整单词;
实例:
行首锚定:
行尾锚定:
分组和引用:
\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理; \(xy\)*ab :表示 xy可以出现 0 次 1 次或多次;
Note:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些
变量为:
\1:模式从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符; \2:模式从左侧起,第二个左括号以及与之匹配右括号之间的模式所匹配到的字符; \3: ~]#grep “\(l..e\).*1” lovers.txt 后向引用:引用前面的分组括号中的模式所匹配到的字符;
egrep: 支持扩展的正则表达式
选项: -i:忽略字符的大小写; -o:只输出文件中匹配到的部分 -v:反转查找 -q: --quiet, --silent;静默模式,即不输出任何信息; -G:支持基本正则表达式; -A#:after,后#行 -B#:before,前#行 -C#:context,前后各#行
扩展正则表达式的元字符; 字符匹配: . :匹配任意单个字符; [] :匹配指定范围内的任意单个字符; [^]:匹配指定范围外的任意单个字符; 次数匹配 *:匹配其前面的字符任意次;0,1,多次; * :匹配任意长度的任意字符; ? :匹配其前面的字符 0 次或 1 次;即其前面的字符是可有可无的; + :匹配其前面的字符 1 次或多次;即其前面的字符要出现 {m}:匹配其前面的字符 m次; {m,n}:匹配其前面的字符至少 m次,至多 n 次; {0,n}:至多 n 次; {m}:至少 m次; 位置锚定: ^:行首锚定:用于模式的最左侧; $:行尾锚定:用于模式的最右侧; \<, \b :词首锚定; \>, \b:词尾锚定; 分组及引用: ():分组:括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中; 后向引用: \1, \2 ,… 或 : a|b: a 或者 b; c|cat:c 或 cat 实例: ~]# grep -E "\<[0-9]{2,3}\>" /etc/passwd
fgrep:不支持正则表达式元字符:
当无需要用到元字符编写模式时,使用fgrep必能更好;