1. 引入
指令 |
作用 |
应用场景 |
grep |
文本过滤/搜索工具 |
分析日志 如:找500错误 201等 |
sed |
文本编辑工具(行) |
写shell脚本,修改配置文件 |
awk |
文本报告生成器(列) |
查看数据,比如ps -aux 赛选指定列 |
1.1. 常用命令储备
1.1.1. 统计命令(wc)
参数 |
作用 |
-l |
统计行 |
-w |
统计单词数 |
-m |
统计字符数 |
1.1.2. 查看文件(tail)
参数 |
作用 |
-数字 |
查看后n行 |
-f |
实时监控文件更新内容 |
1.1.3. 查看文件(head)
2. grep
2.1. 简介
-
说明:grep命令是一种强大的文本搜索工具
-
作用:使用正则表达式搜索文本,并把匹配的行打印出来
2.2. 语法
-
语法:grep [参数] 内容 路径及文件名 (支持正则)
-
参数:(可以通过命令grep --help查看)
参数 |
作用 |
-c |
只输出匹配行的计数。 |
-i |
不区分大小写。 |
-h |
查询多文件时不显示文件名。 |
-l |
查询多文件时只输出包含匹配字符的文件名。 |
-n |
显示匹配行及行号。 |
-s |
不显示不存在或无匹配文本的错误信息。 |
-v |
显示不包含匹配文本的所有行。 |
--color=auto |
可以将找到的关键词部分加上颜色的显示。 |
正 则 |
作 用 |
^ |
开头 如:'^grep'匹配所有以grep开头的行。 |
$ |
结束 如:'grep$'匹配所有以grep结尾的行。 |
. |
匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。 |
* |
匹配零个或多个先前字符 |
[] |
匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。 |
[^] |
匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。 |
\(..\) |
标记匹配字符,如'\(love\)',love被标记为1。 |
\ |
锚定单词的开始,如:'\grep匹配包含以grep开头的单词的行。 |
\> |
锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。 |
x\{m\} |
重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。 |
x\{m,\} |
重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。 |
x\{m,n\} |
重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。 |
2.3. 示例
grep '/usr/sbin/nologin' /etc/passwd
grep --color '/usr/sbin/nologin' /etc/passwd
- 匹配禁止登陆的用户(高亮 + 行号 + 不区分大小写):
grep --color -in '/usr/sbin/nologin' /etc/passwd
grep --color -in '/usr/sbin/nologin' /etc/passwd | wc -l
- 统计正常登陆用户个数(多学一招:wc -l 路径及文件名 统计总行数):
grep -c '/bin/bash' /etc/passwd
- 匹配用户编号在1000-1999之间的所有用户数据:
grep --color -ni 'x:1[0-9]\{3\}' /etc/passwd
grep --color -ni 'test' /etc/passwd
3. sed(行)
3.1. 简介
-
说明:sed是一个文本编辑工具
-
作用:匹配修改/删除文件行数据
3.2. 语法
-
语法:sed 选项 '规则' 路径及文件名
-
参数:
-i :直接修改读取的文件内容,而不是输出到终端( insert)
- 规则:
规则参数 |
作用 |
语法 |
说明 |
a (append) |
追加 |
/旧数据/a \新数据 |
当前行追加文本(后面写入数据) |
i (insert) |
插入 |
/旧数据/i \新数据 |
当前行上面插入文本 |
d (delete) |
删除 |
/旧数据/d |
删除 |
s (replace) |
替换 |
s/旧数据/新数据/g |
注:不写g则只处理每行匹配的第一个结果 |
3.3. 示例
cp /etc/passwd sed.txt
- 匹配test更改为test_update(查看结果不修改源文件)
sed 's/test/test_update/' sed.txt
- 匹配test更改为test_update(改源文件)
sed -i 's/test/test_update/' sed.txt
sed -i '/1006/i \555' sed.txt
sed -i '/1006/a \555' sed.txt
sed -i '/555/d' sed.txt
- 匹配用户编号在1000-1999之间的所有用户编号数据改为6666
sed -i 's/x:1[0-9]\{3\}/x:6666/' sed.txt
- 匹配用户编号在1000-1999之间的所有用户编号和用户组编号数据改为6666
sed -i 's/1[0-9]\{3\}/6666/g' sed.txt
4. awk(列)
4.1. 简介
-
说明:awk是一个文本处理工具(文本报告生成器)
-
作用:提取列数据
4.2. 语法
-
语法:awk '条件{动作1},...,条件2{动作2}' 路径及文件名
-
说明:默认制表符分隔每列,更改{FS=“:”}
-
说明:文件扫描前进行的操作BEGIN{} 或 后面扫描后进行的操作END{}
4.3. 示例
ps -aux | awk '{print $1 "-" $2}'
- 通过awk显示/etc/passwd第一列数据(注:需要更改列分隔符)
awk 'BEGIN{FS=":"}{print $1}' /etc/passwd