模块 3 · 第 2 课(共 2)课程中的7/11~15 min
模块课程(2/2)
管道和过滤器(grep 和 |)
Linux 命令行最强大的功能之一是能够连接不同的命令,以便一个命令的输出成为下一个命令的输入。此技术是使用 管道 完成的,并且通常与文本过滤命令 grep 配对。
过滤文本:grep
grep(全局正则表达式打印)命令在一个或多个文件中搜索特定的文本字符串并打印匹配的行:
Bash
grep "string" [file_name]grep 的有用选项
grep -i "error" server.log:执行 不区分大小写 搜索(忽略大小写之间的差异,查找“Error”、“error”或“ERROR”)。grep -n "connection" server.log:显示行号以及匹配行。grep -v "INFO" server.log:反转搜索,仅显示不包含指定关键字的行。
链接命令:管道 |
管道运算符由竖线 | 表示。它将左侧命令的标准输出直接发送到右侧命令的标准输入:
Bash
[command1] | [command2]例如,如果日志文件很大,并且您想要搜索特定单词而不打印整个文件,则可以组合 cat 和 grep:
Bash
cat logs/server.log | grep ERROR这会使用 cat 读取整个 server.log 文件,但不是将其打印到屏幕,而是通过管道将流传输到 grep,后者仅过滤并显示包含单词“ERROR”的行。
使用示例和常见错误
如果您在仅包含大写字母(例如“POST”)的文件中搜索小写单词(例如“post”),则 grep 将不会返回任何内容:
Bash
grep "post" logs/access.log
# Output: (no results, search is case-sensitive by default)要查找该行(无论大小写),请使用 -i 标志:
Bash
grep -i "post" logs/access.log
# Output:
# 127.0.0.1 - - [22/May/2026:10:10:00 +0000] "POST /login HTTP/1.1" 401 234如果指定的文件不存在,grep将返回错误:
Bash
grep "ERROR" nonexistent_file.log
# Output:
# grep: nonexistent_file.log: No such file or directory自己尝试一下
练习 1:在日志文件中搜索错误
锻炼#linux.m3.l2.e1
尝试:0加载中...
过滤文件“logs/server.log”以仅提取并显示包含单词“ERROR”(区分大小写)的行。
正在加载编辑器...
显示提示
使用 grep 命令,后跟要搜索的单词和文件路径。
3 次尝试后可用的解决方案
练习 2:管道和过滤器
锻炼#linux.m3.l2.e2
尝试:0加载中...
使用 cat 命令读取文件“logs/server.log”,并将其输出通过管道 (|) 传送到 grep 命令,以仅过滤和打印包含单词“WARNING”的行。
正在加载编辑器...
显示提示
使用管道“|”将 cat logs/server.log 连接到 grep WARNING特点。
3 次尝试后可用的解决方案
练习 3:不区分大小写的搜索
锻炼#linux.m3.l2.e3
尝试:0加载中...
使用适当的 grep 标志在“logs/access.log”文件中搜索包含单词“post”(大写或小写)的所有行。
正在加载编辑器...
显示提示
使用带有 -i 选项的 grep 可以忽略大小写。
3 次尝试后可用的解决方案