Linux文本处理三剑客
*************************************************
grep:文本过滤(pattern模式)工具 grep egrep fgrep
sed:stream editor,文本编辑工具
awk:Linux上的实现gawk,文本报告生成器
*************************************************
grep 格式 grep [options] PATTERN [file…]
grep root /etc/passwd
grep “$USER” /etc/passwd
grep ‘$USER’ /etc/passwd
grep `whoami` /etc/passwd
-v 显示不被PATTERN匹配到的行 grep -v ‘a’ f2 将文件f2中不包含字符a的行输出
-i 忽略字符的大小写
-n 显示匹配的行号 将匹配到的行号和行输出
-c 统计匹配的行数 行数表示有几行包含所匹配的字符
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A#:after 后#行 将匹配到字符所在行及后#行输出
-B#:before 前#行 将匹配到字符所在行及前#行输出
-C#:将匹配到字符所在行及前后各#行输出
-e:实现多个选项间的逻辑or关系 grep -e “root” -e “user” f1 取f1文件中的root或者user 或关系
可以加多个每个前必须加-e
-w:匹配整个单词
grep “root” f1只要包含root的字符都输出rooter也可以输出
grep -w “root” f1只包含root,rooter就不能输出
除数字字母下划线以外都可以作为分隔符
-f:相当于fgrep,不支持正则表达式
例:cat >p.txt 创建文件p.txt
grep -f p.txt /etc/passwd 在/etc/passwd中匹配p.txt的内容(输出与p文件内容相同的行)
**************************************************************************************
正则表达式
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义而表示控制或通配的功能
分类:基本正则表达式 BRE 扩展正则表达式 ERE
元字符分类:字符匹配 匹配次数 位置锚定 分组
*************************************************************************************
字符匹配:
. 匹配任意单个字符 一个.代表一个字符,两个.就代表两个字符 …… 放在中括号内不表示单个字符
例 :echo abc |grep “a.c” 具有贪婪模式, 从左到右三个三个输出,最后不够三个颜色不变
转义:grep -w “.\..” f2 本来三个点表示匹配任意三个字符,但转义之后中间表示一个点不代表字符结果为a.b
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃)
[:digit:] 十进制数字
[:xdigit:]十六制数字
[:graph:] 可打印空白字符
[:print:] 可打印字符
[:punct:] 标点符号
***************************************************************************************
匹配次数:用在指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括0次,具有贪婪模式:尽可能长的匹配 X* 表示x出现的任意次
例grep “ax*b” f2 表示一个单词或者一个字符串以a开始b结尾中间的x不管出现几次其中b必须有*前的字符可有可无
.* 任意长度的任意字符 包括空行
\? 匹配其前面的字符0次或1次 例 grep “ab\?” f2 表示b的次数是一次或者0次
\+ 匹配其前面的字符至少一次 例grep “ab\+” f2 表示b的次数至少一次
\{\n} 匹配前面的字符n次 例 grep “ab\{3\}” f2 表示b的次数出现3次
\{m,n\}匹配前面的字符至少M次最多n次
\{,n\}匹配前面的字符最多出现n次
\{n,\}匹配前面的字符最少出现n次
************************************************************************************
位置锚定:定位出现的位置
^ 行首锚定,用于模式的最左侧 表示最左侧即开头是以什么字符或单词(与-w配合)出现
在中括号内说明是取反 在中括号外说明是行首锚定
$ 行尾锚定,用于模式的最右侧 grep “ab$” f2 表示最右侧是ab结尾的字符
^PATTERRN$ 用于模式匹配整行 ^$空行 ^[:space:]$空白行
\<或\b 词首锚定,用于单词模式的左侧 grep “\<abb” f2 表示字符的最左侧是以abb开头的字符或单词(-w)
\>或\b 词尾锚定,用于单词模式的右侧
\< \>匹配整个单词
************************************************************************************
分组\(\)将一个或多个字符捆绑在一起,当作一个整体进行处理
分组括号中的模式匹配到的内容会被正则表达式引擎记录与内部的变量中,这些变量的命名方式为:\1,\2,……
例 \(string1\+\(string2\)*\) \1: string1\+\(string2\)*\ \2: string2
后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
或者: \| a\|b a或b
例 grep “\(ab\)\{2\}” f2 把ab作为一个整体连续出现两次的输出显示
grep “hello\{2\}” f2 “\{2\}”表示前面的字符连续出现2次,所影响的字符只是前面的单个字符即o显示为helloo hellooo……
grep “\(ab\(bc\(cd\)\)\)” f2 把ab bc cd分别做分组,ab为一组bc为一组cd为一组
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95315
评论列表(2条)
666
@linux_test:有没有错的地方