背景
日常开发中,我们可能得写一些自动化脚本,或者是通过日志排查BUG。这两种场景,都涉及对文件进行处理,这里分享一些常用的命令基础使用和命令组合,提供一部分例子,其他根据需求拓展。
命令详解:用途与参数
1. grep
用途:文本搜索,在文件或标准输入中搜索匹配模式的行
核心参数:
-r 递归搜索目录
-i 忽略大小写
-n 显示行号
-v 反向匹配(不包含模式的行)
-l 只显示包含匹配的文件名
-E 扩展正则表达式
实用示例:
基本搜索
grep “关键字” 文件名
递归搜索目录,显示行号
grep -rn "关键" 目录
使用正则表达式搜索IP地址
grep -E "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" access.log
2. find
用途:文件查找工具,在目录树中查找文件
核心参数:
-name 按文件名匹配
-type 按文件类型(f=文件,d=目录)
-mtime 按修改时间(-n表示n天内,+n表示n天前)
-size 按文件大小
-exec 对找到的文件执行命令
实用示例:
按名称查找
find 目录 -name "*.log" (下面示例 . 代表当前目录)
查找最近7天内修改的文件
find 目录 -type f -mtime -7
查找大于50MB的文件
find 目录 -type f -size +50M
组合条件:查找30天前的临时文件
find 目录 -name "*.log" -type f -mtime +30
3. -exec - find的执行参数
用途:对find找到的每个文件执行命令
语法:
{} 代表找到的文件名
\; 命令结束符
实用示例:
查找并删除临时文件
find 目录 -name "*.log" -exec rm {} ;
查找并更改权限
find 目录 -name "*.log" -exec chmod +x {} ;
安全操作:先查看再删除
find 目录 -name "*.log" -exec ls -lh {} ; # 先查看
find 目录 -name ".log" -exec rm {} ; # 再删除
4. awk
用途:文本处理语言,处理结构化文本数据
核心参数:
-F 指定字段分隔符
$n 第n个字段
实用示例:
使用逗号分隔符,输出每行第二段
awk -F',' '{print $2}' 文件
5. sed
用途:流编辑器,对文本进行替换、删除等操作
核心参数:
s/old/new/g 全局替换
-i 直接修改文件
/pattern/d 删除匹配行
-e 执行多个操作
实用示例:
文本替换,只显示到屏幕,并不进行直接修改
sed 's/被替换字符/替换字符/g' 文件
文本替换,直接修改文件
sed -i 's/被替换字符/替换字符/g' 文件
删除注释行(^#代表每行的第一个字符为#)
sed '/^#/d' 文件
多重操作:删除空行并替换文本
sed -e ‘操作1’ -e ‘操作2’ 文件
6. xargs
用途:参数传递工具,将标准输入转换为命令行参数
核心参数:
-I {} 定义替换字符串
-n 每次命令使用的参数个数
实用示例:
基本使用:删除文件
find 目录 -name "*.log" | xargs rm
使用替换字符串
find 目录 -name "*.log" | xargs -I {} cp {} {}.backup
分批处理
echo "1 2 3 4 5" | xargs -n 2 echo
输出:
1 2
3 4
5
二、常见组合:
组合1:find + grep - 精准文件内容搜索
场景:在特定类型的文件中搜索内容
查找文件匹配行
find 目录 -name "*.py" | xargs grep -l "import requests"
组合2:grep + awk - 数据提取与分析
场景:从日志或数据文件中提取并分析特定信息
分析访问日志:统计login路由,IP 访问次数
grep "GET /login" access.log | awk '{print $1}' | sort | uniq -c | sort -nr
组合3:find + xargs - 批量文件操作
场景:对找到的文件进行批量操作
批量压缩日志文件
find 目录 -name "*.log" -mtime +30 | xargs -I {} gzip {}