grep文本搜索大师grep 的全称是 global regular expression print即全局正则表达式打印。它的核心功能是在文件中搜索特定模式的文本并将包含该模式的行打印出来。grep 支持强大的正则表达式语法这使得它能够灵活匹配各种复杂的文本模式 。主要用途在文件中查找特定字符串或模式假设我们有一个名为example.txt的文件想要查找其中包含 “hello” 的行只需在终端输入grep hello example.txtgrep 就会迅速找出所有包含 “hello” 的行并显示出来。过滤日志文件提取关键信息在处理大量日志文件时grep 尤为有用。例如系统日志文件syslog记录了众多系统事件若我们想查看与网络连接相关的错误信息可以使用grep network error syslog这样就能快速定位到包含网络错误信息的日志行 。检查配置文件验证配置是否正确对于各种服务的配置文件如/etc/httpd/conf/httpd.conf我们可以通过 grep 检查某些关键配置项是否存在或配置正确。比如检查是否启用了KeepAlive可以执行grep KeepAlive On /etc/httpd/conf/httpd.conf。常用参数-i忽略大小写进行搜索。当我们不确定要搜索的字符串在文件中是大写还是小写时使用这个参数就很方便例如grep -i hello example.txt它会把文件中所有 “hello”“Hello”“HELLO” 等形式都找出来 。-v显示不包含匹配文本的行。如果我们想查看example.txt中不包含 “hello” 的行就可以用grep -v hello example.txt。-n显示匹配行的行号。在查找长文件时知道匹配内容所在的行号有助于快速定位比如grep -n error log.txt输出结果会在每行匹配内容前显示其行号 。sed流编辑器sed 全称 stream editor即流编辑器。它擅长对文本进行逐行处理能够实现文本替换、删除、插入、修改等多种操作。sed 的强大之处在于它可以自动处理多行文本无需人工手动干预每一行 。主要用途批量修改文件内容假如我们有一批 HTML 文件需要将所有文件中的 “旧标题” 替换为 “新标题”使用 sed 就可以轻松完成。命令如下sed s/h1旧标题\/h1/h1新标题\/h1/g *.html这里的s表示替换g表示全局替换即对文件中的每一行都进行替换操作 。转换文件格式例如将一个 CSV 文件中的字段分隔符从逗号改为制表符。假设文件名为data.csv可以使用sed s/,/\t/g data.csv new_data.tsv这样就将data.csv中的逗号分隔符替换为制表符并将结果输出到new_data.tsv文件中 。提取特定行或字段如果我们只想查看一个文件的第 5 到 10 行可以使用sed -n 5,10p filename-n表示不输出所有行p表示打印指定行。若要提取每行的第 3 个字段假设字段以空格分隔可以通过sed s/^.* \([^ ]*\) [^ ]*$/\1/ filename来实现 。常用参数-e允许对输入文本进行多个编辑操作。比如我们想同时替换文件中的两个字符串可以使用sed -e s/字符串1/新字符串1/g -e s/字符串2/新字符串2/g filename 。-i直接修改文件内容而不是仅输出到屏幕。在进行批量修改时如果希望直接修改原文件就加上这个参数如sed -i s/旧内容/新内容/g filename 。awk文本报告生成器awk 是一种编程语言专门用于处理文本数据。它可以将文本按照指定的分隔符分割成字段然后对每个字段进行计算、比较、转换等操作。awk 非常适合处理结构化的数据如 CSV 文件、日志文件等 。主要用途生成格式化报表假设有一个学生成绩的 CSV 文件scores.csv格式为 “姓名语文数学英语”我们想要生成一个报表显示每个学生的姓名和总分。可以使用以下 awk 命令awk -F, {print $1, $2$3$4} scores.csv这里-F,指定了字段分隔符为逗号$1表示第一个字段姓名$2$3$4计算了语文、数学、英语成绩的总和 。统计分析数据对于一个包含访问日志的文件access.log我们想统计每个 IP 地址的访问次数可以用awk {count[$1]} END {for (ip in count) print ip, count[ip]} access.log这里$1表示日志中的 IP 地址字段通过数组count统计每个 IP 出现的次数并在处理完所有行后输出结果 。提取特定字段并进行计算例如在一个包含商品价格和数量的文件中计算每种商品的总金额。假设文件products.txt格式为 “商品名称价格数量”命令可以是awk -F, {print $1, $2*$3} products.txt它会输出商品名称和对应的总金额 。常用参数-F指定字段分隔符。如前面例子中使用-F,指定逗号为分隔符如果是制表符分隔则用-F\t 。实战演练三剑客的应用实例实例 1查找包含特定关键字的行需求在一个名为article.txt的文章文件中查找所有包含 “Linux” 关键字的行。命令grep Linux article.txt实例 2替换文件中的字符串需求将config.ini文件中的所有 “old_value” 替换为 “new_value”。命令sed s/old_value/new_value/g config.ini实例 3统计文件中每个单词出现的次数需求对words.txt文件中的单词进行统计输出每个单词及其出现的次数。命令awk {for(i1;iNF;i)count($i)}END{for(word in count)print word, count(word)} words.txt三剑客进阶组合使用Linux 三剑客不仅可以单独使用还可以组合使用发挥出更强大的威力 。grep sed先用 grep 查找特定行再用 sed 对这些行进行修改。例如在error.log文件中查找所有包含 “error” 的行并将 “error” 替换为 “warning”可以使用grep error error.log | sed s/error/warning/g这里的|是管道符用于将 grep 的输出作为 sed 的输入 。grep awk先用 grep 过滤数据再用 awk 进行统计分析。比如在access.log日志文件中先查找所有包含 “GET” 请求的行然后统计每个 IP 地址发起 “GET” 请求的次数命令为grep GET access.log | awk {count[$1]} END {for (ip in count) print ip, count[ip]} 。sed awk先用 sed 转换数据格式再用 awk 进行处理。例如将一个 CSV 文件中的字段顺序进行调整后再用 awk 进行计算。假设data.csv文件格式为 “字段 1, 字段 2, 字段 3”要将其调整为 “字段 3, 字段 1, 字段 2”并计算字段 1 和字段 3 的和可以先使用sed s/\([^,]*\),\([^,]*\),\([^,]*\)/\3,\1,\2/ data.csv调整格式然后通过管道将结果传递给 awksed s/\([^,]*\),\([^,]*\),\([^,]*\)/\3,\1,\2/ data.csv | awk -F, {print $1, $2, $1$3} 。Linux 三剑客 ——grep、sed 和 awk是 Linux 系统中不可或缺的文本处理工具。掌握 Linux 三剑客都能让我们事半功倍希望本文能帮助到大家。​