「Linux 系统编程」grep、xargs
1 grep
1.1 grep 命令语法
grep 用于在 文件 或 输入流 中查找 匹配指定模式 的内容。
1 | |
-i:忽略大小写,不区分大小写匹配-n:显示匹配行的行号-v:反向匹配,显示不包含模式的行-r或-R:递归搜索,在目录及其子目录的所有文件中查找-w:匹配整个单词,而不是单词的一部分
1.2 grep 命令示例
示例:
1 | |

1 | |

1.3 结合 ps 使用
grep 也可以结合 ps aux 命令以及管道使用。ps 监控后台进程工作情况,默认只显示当前可以和用户交互的进程。
a:显示所有用户的进程(包括其他用户的进程)u:以用户为中心的格式显示(包含用户名、CPU 占用率等详细信息)x:显示没有控制终端的进程(如后台运行的进程)
示例:
1 | |

1 | |
使用 grep 搜索进程,有一条结果是搜索进程本身。

2 xargs
2.1 xargs 命令语法
xargs 主要功能是将标准输入的数据转换为命令的参数,通常与管道(|)结合使用,处理前一个命令的输出结果。
1 | |
xargs 会将 命令1 的输出作为参数传递给 命令2。
2.2 xargs 命令示例
示例:
1 | |

可以看出 find ./ -name "*.cpp" | xargs ls -lh 命令和 find ./ -name "*.cpp" -exec ls -lh {} \; 的效果是一样的。
当查找结果集合较大时,xargs 会对结果进行 分段处理,较为高效。
2.3 配合 find 安全删除文件
xargs 默认用 空格 来分割结果集。当文件名有空格的时候,会因为文件名被切割失效:

此时需要以 null 字符作为分隔符,来处理含空格 / 特殊字符的文件名。然而在 find 中默认会选择 -print 选项(用换行符分隔路径)。
当 -print 这种输出传递给 xargs 时,空格和换行符都会被视为分隔符,进而导致带空格的文件被错误拆分。
因此,需要在 find 命令中添加参数 -print0(用 null 空字符 \0 分隔),这样空格和换行符会被保留。通常结合 xargs -0 使用,用于 读取 \0 分隔的输入,正确传递每个完整文件名。
1 | |
-print0:让find输出以 null 空字符分隔(处理含空格的文件名)-0:让xargs识别 null 分隔符

「Linux 系统编程」grep、xargs
https://marisamagic.github.io/2025/08/06/20250806/