一、grep 文本过滤命令

1.定义

Global search regular expression and print out the line
全面搜索研究正则表达式并显示出来

grep 文本过滤命令是一种强大的文本搜索工具 , 根据用户指定的“模式”对目标文本进行匹配检查 , 打印匹配到的行

由正则表达式或者字符及基本文本字符所编写的过滤条件

2.grep 的格式

格式:
         grep 匹配条件 处理文件-i             ##忽略大小写
-E             ##有"|“时,需要加-E,防止其被shell认成管道符
-v             ##不包含,反向匹配
\<关键字\> ##不匹配关键字前后,只匹配关键字
^关键字\>   ##以关键字开头的行
\<关键字$   ##以关键字结尾的行
^关键字\>|\<关键字$      ##”|"表示或
.*              ##关键字之间匹配任意字符
'w....s'   ##w到s之间有4个字符
'w..'         ##w后有2个字符

例如:
1.将passwd里的含有root字符的行过滤出来
2.将passwd里的以root字符开头的行过滤出来

3.grep 中的正则表达式

^westos     ##以westos关键字开头的
westos$     ##以westos关键字结尾的
'w....s'   ##w和s之间有4个字符
'w.....'   ##w后有5个字符
'.....s'   ##s之前有5个字符

4.grep 中字符的匹配次数设定

*字符出现 [0- 任意次 ]
\?从前匹配,字符出现 [0-1 次 ]
\+从前匹配,字符出现 [1- 任意次 ]
\<{n}从前匹配,字符出现 [n 次 ]
\<{m,n} 字符出现 [ 最少出现 m 次,最多出现 n 次 ]
+\>从后匹配,字符出现 [1- 任意次 ]

5.grep 中字符的匹配位置设定

^关键字以关键字开头的行
关键字$以关键字结尾的行
\<关键字不匹配关键字前面的
关键字\>不匹配关键字后面的
\<关键字\>不匹配关键字前后,只匹配关键字

6.grep 正则表达式与egrp扩展正则表达式

正规的 grep 不支持扩展的正则表达式子 , 竖线是用于表示”或”的扩展正则表达式元字符 , 正规的 grep 无法识别;加上反斜杠 , 这个字符就被翻译成扩展正则表达式 , 就像 egrp和grep -E 一样

二、sed 行编辑器

1.定义:

stream editor
用来操作纯ASCII 码的文本
处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)可以指定仅仅处理哪些行
sed 符合模式条件的进行处理,不符合条件的不予以处理
处理完成之后把缓冲区的内容送往屏幕
接着处理下一行,这样不断重复,知道文件末尾

2.sed 命令格式

sed [options] '模式条件' file

-i 输入到源文件中
-n 表示抑制模式空间里内容的输出
-e 分两次执行

3.sed 对字符处理的多种模式

01) p 模式操作(显示)

sed /^#/p fstab       ##复制以#开头的行
sed -n /^#/p fstab    ##复制以#开头的行并显示
sed -n '/^#/!p' fstab ##除了带#号的不显示,其余都显示

1.显示fstab文件的第2行到第6行
cat -n fstab | sed -n ‘2,6p’

2.只显示fstab文件的第6行
cat -n fstab | sed -n ‘6p’

3.显示fstab文件的第2行和第6行
cat -n fstab | sed -n -e ‘2p’ -e ‘6p’ 或者 cat -n fstab | sed -n -e “2p;6p”

4.除了不显示第2行到第6行外,其余的都显示
cat -n fstab | sed -n ‘2,6!p’

02)d 模式操作 (删除)

sed '/^#/d' fstab     ##将以#开头的行删除
sed -ne '/^#/d' fstab ##将带#开头的行删除,并显示结果

1.删除fstab文件里以#开头的行以及空白行
sed -e ‘/^#/d’ -e ‘/^$/d’ fstab

2.删除fstab文件里的第4行到第6行
cat -n fstab | sed ‘4,6d’

3.删除fstab文件里的第4行和第6行
cat -n fstab | sed -e ‘4d;6d’

4.删除fstab文件里不以UUID开头的行
sed ‘/^UUID/!d’ fstab

03)a 模式操作 (在后面添加)

sed '/^UUID/ahello' fstab          ##在UUID开头的行后加hello
sed '/^UUID/ahello\nwestos' fstab  ##在UUID开头的行后加多行(\表示换行)

04)i 模式操作 (插入即在前面添加)

sed '/^UUID/ihello' fstab         ##在UUID开头的行前插入hello
sed '/^UUID/ihello\nwestos' fstab ##在UUID开头的行前插入多行(\表示换行)

05)c 模式操作 (替换)

sed '/^#/chello' fstab            ##将以#开头的行替换为hello

06)w 模式操作 (写入即整合)

sed '6r /mnt/hello' /mnt/fstab    ##将hello文件里的所有内容添加到fstab文件的第6行
4.sed 的其它用法

01)行号与内容

sed -n '/^UUID/=' fstab           ##显示以UUID开头的行的行号
sed -ne '/^UUID/=;/^UUID/p' fstab ##显示行号并显示内容
sed -ne '/^UUID/=;/^UUID/p' fstab | sed 'N;s/\n/ /g'  ##将行号和内容一行显示(|前是两份输出,N表示提前将下一份输出的结果提取 "\n"表示换行符)

02)文件方式调用

vim rule
1 /^UUID/=
sed -nf rule fstab        ##用文件调用,对fstab文件进行操作
vim rule
1 /^UUID/=
2 /^UUID/p
sed -nf rule fstab        ##用文件调用,对fstab文件进行操作

03)更换

sed -i '=' passwd
sed -i 'N;s/\n/ /g' passwd
sed 's/nologin/bash/g' passwd    ##更换全文的nologin为bash
sed '1,5s/nologin/bash/g' passwd ##换1-5行的nologin为bash
sed '5s/nologin/bash/g' passwd   ##只换第五行
sed -e '5s/nologin/bash/g;3s/nologin/bash/g' passwd
sed '/daemon/,/mail/s/nologin/bash/g' passwd   ##用字符作标准进行替换

替换/ 时 , 用@符代替

sed 's@\@ @g' passwd

04)加空行

sed 'G' passwd                  ##加空行
sed '$!G' passwd                ##最后一行不加空行,其余都加
sed -n '$p' passwd              ##打印最后一行