grep 文本过滤工具

grep egrep fgrep(不支持正则表达式搜索)

sed 文本编辑工具

awk linux上的实现gawk,文本报告生成器

grep对目标文本逐行进行匹配检查,打印匹配到的行

Grep

grep [options] pattern [file...]

[root @ centos7 data]#echo '$USER'

$USER

[root @ centos7 data]#echo "$USER"

root

--color=auto

-m # 匹配#次后停止

-v 显示不被匹配的行

-i 忽略大小写

-n 显示匹配的行号

-c 统计匹配的行数

-o 仅显示匹配到的字符串

-q 不输出任何信息

-A # 后#行

-B # 前#行

-C # 前后各#行

-e 实现多个选项间的逻辑or

-w 匹配整个单词

-E 使用ERE

-F 相当于fgrep 不支持正则表达式

-f file 根据模式文件处理

正则表达式(REGEXP)

基本正则表达式:BRE

扩展正则表达式:ERE

   grep -E ,egrep

元字符分类:

字符匹配

匹配次数

位置锚定

分组

字符匹配

. 匹配任意单个字符

[] 匹配指定范围内的任意单个字符,示例:[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$ 用于模式匹配整行

^$ 空行

^[[:space:]]*$ 空白行

\< 或\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

扩展正则表达式

egrep = grep -E

egrep [options] pattern [file...]

sed

sed 一次处理一行内容

1)读取一行,把当前处理的行存储在临时缓冲区--"模式空间"

2)sed命令处理缓冲区中的内容

3)把缓冲区内容送到屏幕

4)读入下一行,执行下一个循环

sed [option]... 'script' inputfile...

-n 不输出到屏幕

-e 多点编辑

-f /path/script_file 从指定文件中读取编辑脚本

-r     支持使用扩展正则表达式

-i.bak 备份文件并原处编辑

script

'地址+命令'

地址定界:

不给地址:对全文进行处理

单地址

#

$

/pattern/

地址范围

#,#

#,+#

/pat1/,/pat2/

#,/pat1/

步进

1~2 奇数行

2~2 偶数行

命令

d 删除模式空间匹配的行,并立即启用下一 轮循环

p 打印

a [\]text 行后追加文本,支持使用\n实现多行追加

i [\]text 在行前面插入文本

c [\]text 替换行为单行或多行文本

w /path/file

r /path/file

= 为模式空间中的行打印行号

! 模式空间中匹配行取反处理

搜索替换

s/// , s@@@ , s###

替换标记

g 行内全局替换

p 显示替换成功的行

w /path/file 将替换成功的行保存至文件中

高级编辑命令

P:打印模式空间开端至\n内容,并追加到默认输出之前

h: 把模式空间中的内容覆盖至保持空间中

H:把模式空间中的内容追加至保持空间中

g: 从保持空间取出数据覆盖至模式空间

G:从保持空间取出内容追加至模式空间

x: 把模式空间中的内容与保持空间中的内容进行互换

n: 读取匹配到的行的下一行覆盖至模式空间

N:读取匹配到的行的下一行追加至模式空间

d: 删除模式空间中的行

D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环