文本处理

grep命令

grep命令:查找文件里符合条件的字符串

grep函数用于在文件中查找可以与模式匹配的文本,并显示其所在行

grep函数的模式字符串即为基础正则表达式:

grep [-acinv] [-AB] [--color=auto] [mode] [file]

选项:

-a 将二进制文件当做文本文件处理

-c 统计找到匹配的次数

-i 忽略大小写

-n 输出匹配的行号

-v 反向查找,即输出不存在匹配的行

-A After,输出匹配的行后面所有行

-B Before,输出匹配的行前所有行

--color=auto 将匹配的内容自动使用不同颜色显示

基础正则表达式:

  • 特定字符串 直接使用单引号括起,特殊字符需要在前面加‘\’转义,解除其特殊功能。

  • 包含/不包含 某集合的元素

[字符集] 代表字符集中任意一个字符,在表达式中占一个字符的位置

[^字符集] 代表字符集不包含的任意一个字符,在表达式中占一个字符的位置

字符集的描述可以将所有元素写出,无需分隔符每个字符即为一个元素(如:[abc])
也可以按照语系字符集的顺序写出(如在LANG=C下的[a-z]表示全体小写英文字母,或[a-z0-9]表示全体小写字母或者数字)

  • 行首行尾

Linux风格的文本,行首标记为“^”, 如'^a'表示第一个字符是a的行。行尾标记为“,z”,′z'表示最后一个字符为z的行

自然地,'^$'表示空行

  • 任意字符

.  任意单个字符,在表达式中占一个字符的位置

* 0至无穷个前一字符的重复,如'a*'表示a后面跟0至无穷个a组成的字符串。

.* 表示任意字符0至无穷次重复,它在正则表达式中表示任意字符串

扩展正则表达式:(grep不支持,使用egrep或grep -E):

+ 重复一个或一个以上的前一个字符,如a+

? 0个或一个的前一个字符, 如a?

| 逻辑或

(a|b) 组字符串,代表字符串a或字符串b

(|)+ 表示重复1次或以上的组字符串

 

Sed命令

sed命令:一种在线编辑器,它一次处理一行内容

sed是以行为单位的支持正则表达式的字符串处理命令

处理时,把当前处理的行存储在临时缓冲区中,称为'模式空间'(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

sed [-inefr] {处理命令/脚本文件} [处理文件]

 

选项:

-n 使用安静模式。若无此参数来自stdin的数据会全部输出到屏幕,若使用此参数则只有经过sed处理的行才会显示

-e 直接在命令行中输入处理命令

-f filename 添加脚本文件

-r 启用扩展正则表达式支持(默认支持基础正则表达式)

-i 直接将修改写入文件,默认将其输出到stdout。

处理命令 '[n1, [n2]]op str' n1,n2表示从n1到n2所有行(闭区间)作为当前行,op是操作符,str是操作符后所接的字符串

 

posted @ 2017-05-04 13:55  dear_diary  阅读(304)  评论(0编辑  收藏  举报