Linux常用的文件操作命令组合

74 阅读3分钟

背景

日常开发中,我们可能得写一些自动化脚本,或者是通过日志排查BUG。这两种场景,都涉及对文件进行处理,这里分享一些常用的命令基础使用和命令组合,提供一部分例子,其他根据需求拓展。

命令详解:用途与参数

1. grep

用途:文本搜索,在文件或标准输入中搜索匹配模式的行

  核心参数:

-r 递归搜索目录

-i 忽略大小写

-n 显示行号

-v 反向匹配(不包含模式的行)

-l 只显示包含匹配的文件名

-E 扩展正则表达式

实用示例:

基本搜索

grep “关键字” 文件名

image.png

递归搜索目录,显示行号

grep -rn "关键" 目录

image.png

使用正则表达式搜索IP地址

grep -E "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" access.log

image.png

2. find

用途:文件查找工具,在目录树中查找文件

核心参数:

-name 按文件名匹配

-type 按文件类型(f=文件,d=目录)

-mtime 按修改时间(-n表示n天内,+n表示n天前)

-size 按文件大小

-exec 对找到的文件执行命令

实用示例:

按名称查找

find 目录 -name "*.log" (下面示例 . 代表当前目录)

image.png

查找最近7天内修改的文件

find 目录 -type f -mtime -7

image.png

查找大于50MB的文件

find 目录 -type f -size +50M

image.png

组合条件:查找30天前的临时文件

find 目录 -name "*.log" -type f -mtime +30

image.png

3. -exec - find的执行参数

用途:对find找到的每个文件执行命令

语法:

{} 代表找到的文件名

\; 命令结束符

实用示例:

查找并删除临时文件

find 目录 -name "*.log" -exec rm {} ;

image.png

查找并更改权限

find 目录 -name "*.log" -exec chmod +x {} ;

image.png

安全操作:先查看再删除

find 目录 -name "*.log" -exec ls -lh {} ;  # 先查看

find 目录 -name ".log" -exec rm {} ;      # 再删除

4. awk

用途:文本处理语言,处理结构化文本数据

核心参数:

-F 指定字段分隔符

$n 第n个字段

实用示例:

使用逗号分隔符,输出每行第二段

awk -F',' '{print $2}' 文件

image.png

5. sed

用途:流编辑器,对文本进行替换、删除等操作

核心参数:

s/old/new/g 全局替换

-i 直接修改文件

/pattern/d 删除匹配行

-e 执行多个操作

实用示例:

文本替换,只显示到屏幕,并不进行直接修改

sed 's/被替换字符/替换字符/g' 文件

image.png

文本替换,直接修改文件

sed -i 's/被替换字符/替换字符/g' 文件

image.png

删除注释行(^#代表每行的第一个字符为#)

sed  '/^#/d' 文件

多重操作:删除空行并替换文本

sed  -e  ‘操作1’  -e  ‘操作2’ 文件

image.png

6. xargs

用途:参数传递工具,将标准输入转换为命令行参数

核心参数:

-I {} 定义替换字符串

-n 每次命令使用的参数个数

实用示例:

基本使用:删除文件

find 目录 -name "*.log" | xargs rm

image.png

使用替换字符串

find 目录 -name "*.log" | xargs -I {} cp {} {}.backup

image.png

分批处理

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"

image.png

组合2:grep + awk - 数据提取与分析

场景:从日志或数据文件中提取并分析特定信息

分析访问日志:统计login路由,IP 访问次数

grep "GET /login" access.log | awk '{print $1}' | sort | uniq -c | sort -nr

image.png

组合3:find + xargs - 批量文件操作

场景:对找到的文件进行批量操作

批量压缩日志文件

find 目录 -name "*.log" -mtime +30 | xargs -I {} gzip {}

image.png