文本处理三剑客

  • 1、grep
  • 字符匹配
  • 2、sed
  • sed字符替换
  • 3、awk


1、grep

grep (global search regular expression_r(RE) and print out the line,全面搜索正则表达式并把行打印出来),用于查找文件里符合条件的字符串,支持基本正则表达式。

grep不支持拓展正则表达式,若使用正则表达式,则使用egrep,在使用上egrep=grep -E

实验素材:

grep空格颜色_正则表达式


使用方法:

grep 参数 过滤条件 文件


过滤包含有root的行:

grep root passwd

grep空格颜色_显示模式_02


忽略大小写过滤包含root的行:

grep -i root passwd

grep空格颜色_正则表达式_03


过滤以root开头的行:

grep ^root passwd

grep空格颜色_grep空格颜色_04


过滤以root结尾的行:

grep root$ passwd

grep空格颜色_grep空格颜色_05


过滤空行

grep ^$ passwd

grep空格颜色_sed_06


反向过滤:将所选条件以外的内容输出
输出除空行以外的内容:

grep -v ^$ passwd

grep空格颜色_显示模式_07


过滤root且root前无字符的行

grep "\<root" passwd

过滤root且root后无字符的行

grep "root\>" passwd

过滤root且root前后无字符的行

grep "\<root\>" passwd

grep空格颜色_sed_08


过滤root且root前后无字符的行且输出行号:

grep -n "\<root\>" passwd

grep空格颜色_正则表达式_09


只显示匹配行的行数:

grep -c "\<root\>" passwd

grep空格颜色_grep空格颜色_10


显示过滤行及上下n行:grep -n passwd
过滤adm并显示上下两行:

grep -2 adm passwd

grep空格颜色_显示模式_11


显示过滤行及上面的两行:

grep -B2 adm passwd

显示过滤行及下面的两行:

grep -A2 adm passwd

grep空格颜色_正则表达式_12


字符匹配

.代表任意字符,一个.代表一个字符

查找文档中开头是r,结尾是t,中间有5个任意字符的匹配行:

grep空格颜色_sed_13

…t匹配t前两个任意字符的行:

grep空格颜色_sed_14


匹配以r开头,中间e的个数0到任意个,以d结尾的字符的行:

grep空格颜色_sed_15

匹配以r开头,中间e的个数1到任意个,以d结尾的字符的行:

grep空格颜色_正则表达式_16


匹配以r开头,中间e的个数0到1个,以d结尾的字符的行:

grep空格颜色_sed_17

{n},显示以r开头,e出现n次,以d结尾的字符的行:

grep空格颜色_sed_18


{,n}匹配以r开头,中间e的个数最少多个,以d结尾的字符的行:

grep空格颜色_grep空格颜色_19


{n,}匹配以r开头,中间e的个数最少n个,以d结尾的字符的行:

grep空格颜色_正则表达式_20

{m,n}匹配以r开头,中间e的个数在m-n区间个,以d结尾的字符的行:

grep空格颜色_grep空格颜色_21


(字符){次数}指定字符出现的次数:

匹配haha出现5次的行:

grep空格颜色_grep空格颜色_22


脚本练习:

写一个脚本,脚本可以显示能够被su命令切换的用户

grep空格颜色_grep空格颜色_23

2、sed

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

使用方法:

sed 参数 命令 处理对象
sed 参数 处理对象 -f 处理规则文件

常用参数:

参数

作用

-n

不显示模式空间内容

-e

可以在命令行执行多条内容

-f

指定处理文件

-i

直接修改原文件

动作:

p

列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行

d

删除

a

添加(当前行的下一行)

c

替换

i|插入(当前行的上一行)

p:打印:
打印passwd文件第5行,使用-n参数不显示模式空间内容:

sed -n 5p passwd

grep空格颜色_grep空格颜色_24


打印passwd文件第五行,显示模式空间内容

sed  5p passwd

grep空格颜色_grep空格颜色_25


打印passwd文件的3到5行,不显示模式空间内容:

sed -n  3,5p passwd

grep空格颜色_grep空格颜色_26

打印passwd文件的第3行和第5行:

sed -ne "3p;5p" passwd

grep空格颜色_显示模式_27


显示3行以后的行:

sed -ne '3,$p' passwd

grep空格颜色_grep空格颜色_28


显示以#开头的行:

sed -n '/^#/p' httpd.conf

grep空格颜色_显示模式_29


删除第3行:

sed  2d passwd

grep空格颜色_正则表达式_30


删除以#开头的行:

sed '/^#/d' httpd.conf

grep空格颜色_sed_31


删除以#开头以外的行:

sed '/^#/!d' httpd.conf

grep空格颜色_正则表达式_32


删除第3行到最后一行:

sed -e '3,$d' passwd

grep空格颜色_正则表达式_33

在第2行后添加hello:

sed -e '2a hello' passwd

grep空格颜色_显示模式_34


在第2行后换行添加hello world:

sed -e '2a hello\nworld' passwd

grep空格颜色_sed_35


在以#开头的行后添加hello:

sed -e '/^#/a hello' httpd.conf

grep空格颜色_显示模式_36


将第3行换为hello:

sed 3chello passwd

grep空格颜色_grep空格颜色_37


将以#开头的行都换为@:

sed -e '/^#/c@' httpd.conf

grep空格颜色_正则表达式_38


在第二行插入hello:

sed 2ihello passwd

grep空格颜色_显示模式_39


将以#开头的行写入file文件中:

sed '/^#/w file' httpd.conf

grep空格颜色_sed_40


grep空格颜色_sed_41

sed字符替换

替换文档中的第一列:为@ :

sed 's/:/@/' passwd

grep空格颜色_正则表达式_42


替换文档中的全文的:为@ :

sed 's/:/@/g' passwd

grep空格颜色_sed_43


替换文档中的1到5行的:为@ :

sed '1,5s/:/@/g' passwd

grep空格颜色_sed_44


替换文档中的2行的:为@ :

sed '2s/:/@/g' passwd

grep空格颜色_grep空格颜色_45


将文档的第三行中的所有:替换成@,将第六行的所有:替换为* :

sed '3s/:/@/g;6s/:/*/g' passwd

grep空格颜色_正则表达式_46


替换文档中字符adm到halt之间的:为@@:

sed '/adm/,/halt/s/:/@@@/g' passwd

grep空格颜色_grep空格颜色_47


替换文档中的/为##:

/为特殊符号,须转译:

sed 's/\//##/g' passwd

grep空格颜色_sed_48


或者:

sed 's@/@##@g' passwd

grep空格颜色_sed_49

sed 参数 处理对象 -f 处理规则文件:

grep空格颜色_显示模式_50

3、awk