grep
文本过滤工具
命令格式:grep 匹配条件 处理文件
命令操作:
grep root /etc/passwd ,过滤包含root关键字的内容

grep ^root /etc/passwd ,以root开头的内容

grep bash$ /etc/passwd ,以bash结尾

grep -i root /etc/passwd ,后略大小写,文件里暂时没有大写的root

grep -iE “<root” /mnt/passwd ,root字符之前不能有字符,“:”这种符号是不算的

grep -iE “root>” /mnt/passwd ,root字符之后不能有字符

grep -数字 root /etc/passwd,显示过滤行以及上面几行和下面几行

grep -n root /etc/passwd,显示匹配的行所在行号

grep -A数字 root /etc/passwd,显示过滤行以及下面几行

grep -B数字 root /etc/passwd,显示过滤行以及上面几行

grep -v root /etc/passwd,反向过滤,除包含root以外的内容

多个条件匹配:grep -E “^root|ROOT” /mnt/passwd ,root开头或者包含ROOT的内容

grep字符数量匹配规则
| grep ^root 处理文件 | 以root开有 |
| grep root$ 处理文件 | 以root结尾 |
| grep r.t 处理文件 | r开头t结尾中间2个任意字符 |
| grep …t 处理文件 | t结尾前面3个任意字符 |
| grep -E root* 处理文件 | 字符出现0到任意次 |
| grep -E ro?ot 处理文件 | ?前的字符是被处理的,o出现的次数0到1次 |
| grep -E ro+ot 处理文件 | +前的字符是被处理的,o出现的次数1到任意次 |
| grep -E “ro{n}t” 处理文件 | n次,n=自定义数字 |
| grep -E “ro{m,n}t” 处理文件 | m到n次,m、n数字自定义,n>m |
| grep -E “ro {0,n}t” 处理文件 | 出现0-n次 |
| grep -E “ro{,n}t” 处理文件 | 出现0-n次 |
| grep -E “ro{m,}t” 处理文件 | 最少出现m次 |
| grep -E “(root){2}” 处理文件 | root字符串出现2次 |
- grep r…t 处理文件 r开头t结尾中间2个任意字符

- grep …t 处理文件 t结尾前面3个任意字符

- grep -E ro?ot 处理文件 ?前的字符是被处理的,o出现的次数0到1次

- grep -E ro+ot 处理文件 +前的字符是被处理的,o出现的次数1到任意次

- grep -E ro{n}t 处理文件 n次,n=自定义数字

- grep -E “ro{m,n}t” 处理文件 m到n次,m、n数字自定义,n>m

- grep -E “(root){2}” 处理文件 root字符串出现2次

sed
命令格式:
sed 参数 命令 处理对象
sed 参数 处理对象 -f 处理规则文件
对字符的处理参数说明
参数p
| p | 显示 |
|---|---|
| sed -n 5p passwd | 显示第5行 |
| sed -n 3,5p passwd | 显示3到5行 |
| sed -ne “3p;5p” passwd | 显示3和5行 |
| sed -ne ‘5,$p’ passwd | 5到最后的行 |
| sed -n ‘/^s/p’ passwd | 显示以s开头的行 |
-
sed -n 5p passwd |显示第五行

-
sed -n 3,5p passwd |显示3到5行

-
sed -ne “3p;5p” passwd |显示3和5行

-
sed -ne ‘5,$p’ passwd |5到最后以行

-
sed -n ‘/^s/p’ passwd |显示以s开头的行

参数d,删除
-
sed 1d passwd ,删除第1行

-
sed ‘/^s/d’ passwd ,把s开头的行删除

-
sed ‘/^user/!d’ passwd ,除了user以外的行都删除

-
sed -e ‘5,$d’ passwd ,删除5到最后一行

参数a,添加
- sed -e ‘$a hello world’ passwd,添加hello在最后

- sed -e ‘$a hello\nworld’ passwd ,添加的hello world 是换行的

- sed -e ‘/^s/a hello world’ passwd ,在s开头的行下面添加hello world

参数c,替换
- sed -e ‘/^s/c hello world’ passwd ,把s开头的行替换为hello world

- sed ‘5chello world’ passwd ,替换第五行为hello world

参数w: 写入
- sed ‘/^user/w testfile’ passwd ,把passwd中user开头的行写入testfile中

参数i :插入
- sed ‘5i hello world’ passwd,把hello world 插入到第五行

参数r :整合文件
- sed ‘5r testfile’ passwd ,将testfile里的内容整合到passwd文件的第五行下面

sed 字符替换
-
sed ‘s/: /###/g’ passwd,将所有 :替换为###

-
sed ‘s/: /###/’ passwd,只将第一列的:替换为 ###

-
sed ‘1,5s/: /###/g’ passwd ,将1-5行的:替换为 ###

-
sed ‘1s/: /###/g’ passwd ,只将第1行:替换为 ###
-
sed ‘1s/: /###/g;5s/: /###/g’ passwd ,将1和5行的:替换为 ###

-
sed ‘/lp/,/shutdown/s/: /###/g’ passwd ,将lp 到 shutdown 之间的行的: 替换为 ###

-
sed ‘s///###/g’ passwd ,将所有 / 替换为 ### ,因为 / 在命令中表示特殊含义所以用 \ 转译

这里也可以使用 @ 来代替 / 的作用在命令中:sed ‘s@/@###@g’ passwd

以上sed的所有操作都是临时展示,不会保存在操作文件里,如果要保存结果需要加参数 -i 将操作保存,
sed ‘s@/@###@g’ -i passwd ,把sed处理的内容保存到passwd文件中

awk 报告生成器
命令格式: awk -F 分隔符 BEGIN{}{}END{} FILENAME
命令操作:
- NR #行数,最直接i就是列出所有的行号

- NF #列数,指定分割符就可以标出每行有多少列

- FILENAME ,表示文件名称本身,在awk命令中写入表示输出的都是被处理文件的文件名:awk ‘/bash$/{print FILENAME}’ passwd ,查找bash结尾的行以文件名显示

- 变量,在awk命令中,{}里的值如果用 " " 括起来表示字符串,没有 " " 括起来表示变量,变量的值需要去特殊指定:awk ‘/bash$/{print “111”}’ passwd ,查找bash结尾的行以111代替显示

awk报告生成的方式:
| 条件表示 | 说明 |
|---|---|
| awk /bash$/ | #条件 |
| /条件1|条件2/ | 条件1或者条件2 ,在一个条件里的两个子条件 |
| /条件1/||/条件2/ | 条件1或者条件2 |
| /条件1/&&/条件2/ | 条件1并且条件2 |
| 行中的列表示 | 说明 |
|---|---|
| $0 | 所有的列 |
| $1 | 第一列 |
| $2 | 第二列 |
| $3 | 第三列 |
| … | … |
awk -F : ‘/sh$/||/bash$/{print $1}’ passwd,查找sh或bash结尾的行,并打印第一列
awk -F : ‘/sh$|bash$/{print $1}’ passwd ,查找sh或bash结尾的行,并打印第一列

awk -F : ‘/^user/&&/bash$/{print $0}’ passwd,查找user开头并且bash结尾的行,打印出全部

其他用法
awk -F : ‘$6~/home/{print}’ passwd ,打印出第六列是home的行

awk -F : ‘$6~/home/&&!/^user/{print}’ passwd,打印出第六列是home并且不是以user开头的行

awk -F : ‘$6!~/home/{print}’ passwd,打印出第六列不是home的行

awk ‘BEGIN{n=0} {n++} END{print n}’ passwd ,打印出文件行数

本文详细介绍Linux下grep、sed和awk三种强大的文本处理工具。grep用于搜索文本中的特定模式,sed擅长进行文本替换和修改,而awk则能生成复杂的报告。掌握这些工具,可极大提升在Linux环境下的文本处理效率。
330

被折叠的 条评论
为什么被折叠?



