「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/