grep,awk,sed命令详细解释

一、grep:文本搜索工具

1. 核心参数与用法

grep [选项] "模式" 文件名
参数作用示例
-i忽略大小写grep -i "error" log.txt
-v反向匹配(排除匹配行)grep -v "#" config.ini
-n显示匹配行的行号grep -n "warning" debug.log
-o仅显示匹配内容(不输出整行)grep -oP "\d{3}-\d{4}" contacts.txt
-A 3显示匹配行后3行grep -A 3 "panic" kernel.log
-B 2显示匹配行前2行grep -B 2 "Connection refused" app.log
-E启用扩展正则表达式(支持 + `` 等)

2. 正则表达式详解

符号功能示例
^匹配行首grep "^root" /etc/passwd
$匹配行尾grep "bash$" /etc/passwd
.匹配任意一个字符grep "a.c" file.txt → 匹配 abc, a1c
*匹配前一个字符0次或多次grep "go*d" file.txt → 匹配 gd, good
[]匹配括号内任意字符grep "[aeiou]" file.txt → 匹配含元音的行
[^]排除括号内字符grep "[^0-9]" file.txt → 匹配非纯数字的行
\转义特殊字符grep "\.log$" files.txt → 匹配以 .log 结尾的行

3. 示例

示例1:查找含 mysql 用户的行并显示行号

grep -n "mysql" /etc/passwd
# 输出:49:mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
  • -n:显示行号
  • "mysql":匹配模式(区分大小写)

示例2:统计日志中 404500 错误次数

grep -E " 404 | 500 " access.log | wc -l
  • -E:启用扩展正则表达式,|表示逻辑或
    

二、sed:流编辑器

1. 核心参数与用法

sed [选项] '命令' 文件名
参数作用示例
-i直接修改文件(需谨慎)sed -i.bak 's/old/new/g' file.txt
-n静默模式(仅输出处理后的行)sed -n '3p' data.txt → 仅打印第3行
-e执行多条命令sed -e '1d' -e 's/foo/bar/' input.txt

2. 常用命令与正则表达式

命令功能示例
s/old/new/g全局替换文本sed 's/foo/bar/g' file.txt
d删除匹配行sed '/^$/d' file.txt → 删除空行
p打印行(需结合 -n 使用)sed -n '/error/p' log.txt
a\text在行后追加文本sed '3a\---分割线---' data.txt

3. 实战示例

示例1:批量替换文件中的日期格式(YYYY-MM-DD → DD/MM/YYYY)

sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/g' dates.txt
  • -E:启用扩展正则表达式

  • ():捕获组,\1\2\3引用分组内容
    

示例2:删除空行并压缩多个空格

sed -e '/^$/d' -e 's/  \+/ /g' text.txt
  • /^$/:匹配空行

  • \+:匹配一个或多个空格
    

三、awk:文本处理与报表生成

1. 核心参数与用法

awk [选项] '模式 {动作}' 文件名
参数作用示例
-F:指定字段分隔符(冒号)awk -F: '{print $1}' /etc/passwd
-v定义变量awk -v threshold=100 '$3 > threshold' data.csv

2. 内置变量与正则表达式

变量功能示例
NR当前行号awk 'NR==2' file.txt → 输出第2行
NF当前行的字段数awk '{print $NF}' log.txt → 输出最后一个字段
~正则匹配awk '$1 ~ /^192\.168/ {print}' access.log

3. 实战示例

示例1:统计 CSV 文件中各分类的销售额

awk -F, '{sum[$2] += $3} END {for (k in sum) print k, sum[k]}' sales.csv
  • sum[$2]:按第2列分类累计销售额

  • END:处理完所有行后执行
    

示例2:提取 IP 地址访问次数前5名

awk '{ip[$1]++} END {for (i in ip) print i, ip[i]}' access.log | sort -nrk2 | head -5
  • ip[$1]++:统计每个 IP 出现次数

  • sort -nrk2:按次数降序排列
    
工具核心场景正则表达式支持适用场景
grep快速搜索文本基础/扩展正则日志过滤、关键词统计
sed行级文本编辑基础正则(需 -E 扩展)批量替换、删除空行、格式化文本
awk列处理与复杂计算扩展正则(类似 Perl)数据报表、字段统计、结构化文本处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疑犯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值