linux文本处理命令及日常高频次用法(干货!建议复制到本地收藏)

grep用法

grep [选项] "搜索模式" 文件名/目录

“grep -E ”“egrep”“grep +\转义”

grep "a\+" grep_test.txt
egrep "a+" grep_test.txt
grep -E "a+" grep_test.txt

基础用法
  1. grep "Hello" grep_test.txt # 搜索文件中含 "Hello" 的行
  2. grep -i "hello" grep_test.txt # -i忽略大小写,匹配 Hello/HELLO/hello 等
  3. grep -n "Error" grep_test.txt # -n 显示行号,显示含 "Error" 行的行号+内容
  4. grep -v "Hello" grep_test.txt # -v反向匹配,输出不含 "Hello" 的所有行
  5. grep -c "aaa" grep_test.txt # -c统计匹配行的数量,统计含 "aaa" 的行总数
  6. grep -o "Hello" grep_test.txt # -o仅输出所有匹配的 "Hello" 字符串
  7. grep -q "Error" grep_test.txt && echo "存在错误行" # -q静默模式,匹配成功返回 0,执行后续命令
  8. grep -x "1. Hello World" grep_test.txt # -x仅匹配完全等于 "1. Hello World" 的行
  9. grep -A 2 "Error" grep_test.txt # 显示匹配行及后续 2 行(A=After)
    grep -B 1 "Error" grep_test.txt # 显示匹配行及前面 1 行(B=Before)
    grep -C 1 "Error" grep_test.txt # 显示匹配行及前后各 1 行(C=Context)
  10. grep "Error" grep_test.txt grep_test_dir/log1.txt # 多个文件同时搜索:搜索两个文件中的 "Error"
  11. grep -l "Error" grep_test.txt grep_test_dir/* # -l输出含 "Error" 的所有文件名
  12. grep -h "Error" grep_test.txt grep_test_dir/log1.txt #-h 仅输出匹配内容,不显示文件名
  13. grep -r "Error" grep_test_dir/ # (-r/-R)递归搜索 grep_test_dir 下所有文件中的 "Error"
  14. grep -r --exclude="*.conf" "Error" grep_test_dir/ # --exclude排除 .conf 后缀文件
  15. grep -r --exclude-dir="tmp" "Error" ./ # 递归搜索当前目录,--exclude-dir排除 tmp 目录
  16. cat grep_test.txt | grep "World" # 从标准输入读取(|代表管道输入),搜索含 "World" 的行
  17. grep -n "^$" grep_test.txt # (^$)查找所有纯空行并显示行号
  18. grep "[[:space:]]" grep_test.txt # (空格 / Tab)匹配含空格或 Tab 的所有行
  19. grep "^1." grep_test.txt # (^ 锚点)匹配行首内容,匹配以 "1." 开头的行
  20. grep "空格$" grep_test.txt # ($ 锚点,匹配行尾内容)匹配以 "空格" 结尾的行(注意行尾空格)
正则表达式精准匹配复杂模式
  1. grep "Err.r" grep_test.txt # 匹配 "Err" 后接任意 1 个字符,再接 "r"(如 Error)
  2. grep "a*" grep_test.txt # 多个前导字符(*),匹配零个或多个 "a"(所有行都满足,因空也匹配)
  3. grep "a\+" grep_test.txt # (+,需转义,匹配一个或多个前导字符)匹配一个或多个连续 "a"(如 aaa、aa)
  4. grep "a\{2\}" grep_test.txt # ({n},需转义:匹配指定次数)匹配恰好 2 个连续 "a"
  5. grep "a\{2,\}" grep_test.txt #({n,},需转义:匹配至少 n 次) 匹配至少 2 个连续 "a"
  6. grep "a\{1,3\}" grep_test.txt #({n,m},需转义:匹配 n-m 次) 匹配 1-3 个连续 "a"
  7. grep -E "a{2,3}" grep_test.txt # (-E):无需转义 +、{}、| 等元字符,直接用 {2,3} 无需转义
  8. grep -E "Error|Warning" grep_test.txt # (或逻辑 |,扩展正则)匹配含 "Error" 或 "Warning" 的行
  9. grep "[0-9]" grep_test.txt # 字符集匹配([]):匹配任意一个指定字符,匹配含任意数字的行
    grep "[a-zA-Z]" grep_test.txt # 匹配含任意字母的行
  10. grep "[^0-9]" grep_test.txt # 反向字符集([^]):匹配除指定字符外的任意字符,匹配含非数字字符的行
  11. grep -w "Hello" grep_test.txt # 等价于 grep "\bHello\b",(\b单词边界:仅匹配完整单词)仅匹配完整单词 "Hello"(不匹配 "HelloWorld")
  12. grep "\Babc\B" grep_test.txt # (\B非单词边界:仅匹配非完整单词)匹配 "abc" 前后不是单词边界的场景(如 "xabcx")
  13. grep -oE "[0-9]{3}-[0-9]{4}-[0-9]{4}" grep_test.txt # 仅提取手机号格式字符串
  14. grep -oE "[a-zA-Z0-9_]+@[a-zA-Z0-9]+\.[a-zA-Z]+" grep_test.txt # 提取邮箱地址
  15. grep -E "[0-9]{4}/[0-9]{2}/[0-9]{2}" grep_test.txt # 匹配 YYYY/MM/DD 格式日期
  16. grep "你好" grep_test.txt # 直接匹配中文字符
  17. grep "a\\\b" grep_test.txt #匹配 "a\b"(\ 需转义为 \\,终端中需写 \\\\ 或用单引号包裹)
    grep 'a\\b' grep_test.txt # 单引号中无需多重转义,直接写 a\\b 匹配 a\b
  18. grep -oE "(13[0-9])-[0-9]{4}-[0-9]{4}" grep_test.txt #分组匹配() 分组匹配手机号前 3 位(13x 开头)
  19. grep -Po "aaa(?= bbb)" grep_test.txt #前瞻匹配, 匹配 "aaa" 且后面紧跟 " bbb"(仅输出 aaa)
  20. grep -Po "(?<=bbb )aaa" grep_test.txt # 后顾匹配,匹配 "aaa" 且前面紧跟 "bbb "(仅输出 aaa)
文件 / 目录精准搜索
  1. grep -r --relative "Error" grep_test_dir/ # 递归搜索,显示相对路径+匹配内容
  2. grep -r --include="*.txt" "Error" ./ # 递归搜索当前目录,仅搜索 .txt 后缀文件
  3. grep -a "keyword" binary_file # 搜索二进制文件中的字符串(需确保文件含可读字符串)
  4. grep -rI "Error" ./ # 递归搜索,跳过二进制文件
  5. grep -b "Hello" grep_test.txt # 显示每个匹配 "Hello" 在该行的字节偏移量
  6. echo -e "Error\nWarning" > patterns.txt && grep -f patterns.txt grep_test.txt # 搜索 patterns.txt 中所有模式
  7. grep -if patterns.txt grep_test.txt # 忽略模式文件中字符串的大小写
  8. grep -r --ignore-case-filenames "error" ./ # 递归搜索,文件名不区分大小写
  9. grep -C 1 --group-separator="=====" "Error" grep_test.txt # 上下文之间用 ===== 分隔
  10. grep -v "^$" grep_test.txt | grep "Hello" # 先过滤空行,再搜索 "Hello"
  11. grep -v "^#" grep_test.txt # 排除行首以 # 开头的注释行(常用)
  12. grep -v -e "^$" -e "^#" grep_test.txt # 排除空行(-e 模式1)和注释行(-e 模式2)(常用)
  13. grep -cH "Error" grep_test.txt grep_test_dir/* # 输出每个文件的匹配行数(H=显示文件名)
  14. ln -s grep_test.txt link.txt && grep -L "Error" link.txt # 搜索符号链接指向的文件,显示无匹配的文件名
  15. grep -r --no-follow "Error" ./ # 递归搜索,不跟随符号链接
  16. grep -r --include="*log*" "Error" ./ # 递归搜索文件名含 log 的文件,include 常用
  17. grep -nH "Error" grep_test.txt grep_test_dir/* # 显示文件名+行号+匹配内容
  18. gzip -c grep_test.txt > grep_test.txt.gz && zgrep "Hello" grep_test.txt.gz # 搜索 .gz 压缩文件
  19. zgrep -r "Error" ./ --include="*.gz" # 递归搜索 .gz 压缩文件中的 "Error"
  20. grep -w "foo bar" grep_test.txt # 匹配 "foo" 和 "bar" 之间有任意空白字符的行
  21. sort grep_test.txt | uniq -d | grep -f - grep_test.txt # 先找重复行,再在原文件中定位
  22. sort grep_test.txt | uniq -u | grep -f - grep_test.txt # 查找仅出现一次的行
  23. grep -E "[0-9]" grep_test.txt | grep -E "[a-zA-Z]" # 同时含数字和字母的行
  24. grep -E ".{50,}" grep_test.txt # 匹配长度大于等于 50 个字符的行
  25. grep -vE ".{20,}" grep_test.txt # 匹配长度小于 20 个字符的行
  26. grep -E "\(.*[^)]$" code.txt # 匹配行首有 ( 但行尾无 ) 的行(可能未闭合),查找未闭合的括号(简单场景)
工作中grep高频次用法:
  1. grep -oE "<[^>]+>" html.txt # 提取 HTML/XML 中的所有标签
  2. grep "root" /etc/passwd # 查找 root 用户信息
    grep -v "/bin/false" /etc/passwd # 查找可登录的用户(排除 /bin/false shells)
  3. grep -rE "password|secret|key" /etc/ # 递归搜索 /etc 下含密码/密钥相关关键词的文件
  4. grep -iE "error|fail|critical" /var/log/app.log > error.log # 提取错误日志到 error.log
  5. grep -iE "error|fail" /var/log/app.log | grep -oE "Error [A-Za-z]+" | sort | uniq -c # 统计错误类型频次
  6. ps aux | grep "nginx" | grep -v grep # 查找 nginx 进程,排除 grep 自身
  7. grep "@" grep_test.txt # 匹配含 @ 的行(如邮箱)
    grep "#" grep_test.txt # 匹配含 # 的行(如注释)
  8. grep "2025-11-26 10:" /var/log/app.log | grep -E "10:[0-5][0-9]:" # 筛选 10 点到 11 点的日志
  9. grep -oE "https?://[a-zA-Z0-9.-]+\.[a-zA-Z]+" url.txt # 提取 HTTP/HTTPS URL(常用)
  10. grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" ip.txt # 提取文件中的 IP 地址(不严格校验合法性)
  11. grep "^SELINUX=" /etc/selinux/config # 查看 SELinux 配置状态(enforcing/disabled)
  12. grep -rE "listen [0-9]+" /etc/nginx/ # 递归查找 Nginx 监听的端口
  13. netstat -tuln | grep ":80" # 查找占用 80 端口的服务
  14. grep -E "^datadir|^socket|^port" /etc/my.cnf # 查找 MySQL 数据目录、套接字、端口配置
  15. grep -E " 404 | 500 " /var/log/httpd/access_log # 筛选 404(未找到)和 500(服务器错误)日志
  16. systemctl list-unit-files --type=service | grep "enabled" # 查找已启用的系统服务
  17. iptables -L -n | grep "ACCEPT" | grep -E "[0-9]+" # 查找防火墙允许访问的端口
  18. docker logs container_name | grep -i "error" # 查看容器日志中的错误信息
  19. python -m py_compile script.py 2>&1 | grep "SyntaxError" # 检查脚本语法错误
  20. ps aux | grep "java" | grep -v grep | grep -oE "-Xmx[0-9]+[mMgG]" # 提取 JVM 最大堆内存参数
  21. grep -rE "AccessKeyId|SecretAccessKey" /data/config/ # 递归查找密钥信息
  22. grep -E "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" /var/log/nginx/access.log | grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | sort | uniq -c | sort -nr | head -10 # 统计 Top10 访问 IP
  23. grep -E "^error_reporting" /etc/php.ini # 查看 PHP 错误报告级别配置
  24. grep "Failed password" /var/log/secure # 查找 SSH 登录失败记录
  25. du -sh /* 2>/dev/null | grep -E "[0-9]+G" # 查找大小超过 1GB 的文件/目录
  26. git status | grep "modified:" # 查找 Git 仓库中已修改但未提交的文件
  27. grep -E ",Beijing$" data.csv # 筛选最后一列(city)为 Beijing 的行
  28. grep -rE "add_header Access-Control-Allow-Origin" /etc/nginx/ # 查找跨域配置
  29. grep -i "out of memory" /var/log/messages # 查找系统内存溢出日志
  30. grep -E "^#max_connections" /etc/my.cnf # 查找 MySQL 中被注释的最大连接数参数
  31. grep -r "." /var/spool/cron/ # 查找所有用户的定时任务
    crontab -l | grep -v "^#" # 查看当前用户的定时任务(排除注释行)
sed用法

sed -i 直接修改原文件,sed默输出所有内容-n指定输出匹配行

-i.bak #(重要)在修改文件前本地创建原始文件副本

sed -n '/error/p' log.txt # 只打印匹配的行(结合-n选项)

替换
  1. sed -i 's/foo/bar/' file.txt # 简单替换(每行第一个匹配)
  2. sed -i 's/foo/bar/g' file.txt # 全局替换(所有匹配)
  3. sed '5s/old/new/' file.txt # 只在第5行进行替换
  4. sed -i '5,10 s/abc/XYZ/g' file.txt
  5. sed -i '5;10 s/test/TEST/' file.txt
  6. sed -i '$ s/END/结束/' file.txt
  7. sed -i.bak '2-4c 第2-4行已合并为一行' sed_test.txt # 替换第2-4行为一行
  8. sed '3,/stop/s/old/new/g' file.txt # 替换第3行到包含"stop"的行之间的内容
删除
  1. sed '/^$/d' file.txt #删除空行,不包含空格/制表符
  2. sed -E /^[[:space:]]*$/d file.txt # 删除空行,包含空格/制表符
  3. sed -E 's/^[[:space:]]*//' file.txt # 删除多余的空格
  4. sed -E s/^[[:space:]]*// file.txt # 删除行首空格
  5. sed -E s/[[:space:]]*$// file.txt # 删除行尾空格
  6. sed '/debug/d' file.txt # 删除包含"debug"的行
  7. sed '5d' file.txt # 删除第5行
  8. sed '10,20d' file.txt # 删除第10到20行
  9. sed '1d;5d' file.txt # 同时删除第1行和第5行
  10. sed '$d' file.txt # 删除最后一行($ 表示行尾)
  11. sed -i.bak '18,$d' sed_test.txt # 删除第18行到末尾
  12. sed -i.bak '/^#/d' sed_test.txt # 删除行首#的注释行
追加/插入
  1. sed '$a\这是最后一行添加的内容' file.txt # 在最后一行添加文本
  2. sed -i.bak 'G' sed_test.txt # 所有行后追加空行
  3. sed -i.bak '/Hello/a ' sed_test.txt #匹配行后追加空行
  4. sed '/end/a\这是追加的内容' file.txt #在包含"end"的行后追加文本
  5. sed -i.bak '/Hello/i ' sed_test.txt # Hello行前插入空行
  6. sed '/start/i\这是插入的内容' file.txt # 在包含"start"的行前插入文本
  7. sed -i.bak '3i 第一行插入内容\n第二行插入内容' sed_test.txt # 第3行前插入两行
其他
  1. sed 's/foo/bar/; s/baz/qux/' file.txt # 使用分号分隔多个命令
  2. sed -e 's/foo/bar/' -e 's/baz/qux/' file.txt # 使用多个-e选项:对第一个-e处理后的该行,执行第二个-e命令输出最终处理后的结果
  3. sed '/pattern/{s/old/new/; s/foo/bar/}' file.txt # 使用大括号分组命令
工作中sed高频次用法
  1. sed -E s/<[^>]*>//g file.txt # 删除HTML标签
  2. sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config #(常用)永久禁用SELinux 安全机制
  3. sed -i 's/^BOOTPROTO=.*/BOOTPROTO=static/' /etc/sysconfig/network-scripts/ifcfg-ens33#更改网卡DHCP为 static
  4. sed -i 's/listen 80;/listen 8080;/' /etc/nginx/nginx.conf #修改 Nginx 端口(替换监听端口)
  5. sed -i '/^2025-10-/d' app.log # 删除 2025年10月的日志(保留11月后)
  6. sed -i 's/^max_connections = 1000/max_connections = 2000/' /etc/my.cnf # MySQL 最大连接数修改
  7. sed -n '/ERROR/p' app.log > error.log # 提取日志中含 ERROR 的行,保存到 error.log
  8. sed -e '/^$/d' -e '/^#/d' /etc/sysctl.conf > sysctl.conf.clean # 清理空白行和注释行
  9. find /data -name "*.conf" -exec sed -i 's/old_value/new_value/g' {} \; # 递归替换所有 .conf 文件中的字符串
  10. sed '1d' data.csv > data_no_header.csv # 删除 CSV 文件第一行(表头)
  11. sed 's/\x00//g' corrupted.txt > fixed.txt # 删除文件中的空字符(\x00),修复乱码
  12. sed -i.bak -nE 's/.*([a-zA-Z0-9_]+@[a-zA-Z0-9]+\.[a-zA-Z]+).*/\1/p' sed_test.txt # 仅保留邮箱
  13. sed -i.bak -nE 's/.*([0-9]{3}-[0-9]{4}-[0-9]{4}).*/\1/p' sed_test.txt # 仅保留手机号,覆盖原文件
文本处理组合用法:
grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log | sort | uniq -c | sort -nr | head -3
awk '{print $1, $3}' score.txt | grep -v "数学" | awk '$2>=60{print}' | sort -k2 -nr | wc -l
grep " 401 " access.log | awk '{print $1, $4}' | tr -d '[' | sort | uniq | wc -l
grep -oE '"GET /[^ ]+"' access.log | sed 's/"GET //; s/"//g' | sort | uniq -c | sort -nr
# CSV文件处理:过滤、转换、格式化输出
cat data.csv |grep -v "#" |awk -F',' '{print $1,$3}' |tr ' ' ',' |sort -t',' -k2 -nr |column -t -s','
# 实时监控日志,多级过滤,输出到文件和屏幕
tail -f /var/log/app.log |grep -E "(ERROR|WARN)" |tee /tmp/errors.log |awk '{print strftime("%Y-%m-%d %H:%M:%S"), $0}' |tee -a /varerror.log
# 分析Nginx日志:找出404错误,统计URL出现次数,排序输出
cat /var/log/nginx/access.log |grep " 404 " |awk '{print $7}' |sort |uniq -c |sort -nr |head -n 20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值