在说xargs命令之前,先说两句linux中的管道(pipe) 。
管道负责单向连接前一个程序的标准输出与后一个程序的标准输入,其本质是一个共享文件 。我们日常最常用到的管道是匿名管道,Shell中的管道符号为“|” 。
文章插图
有空会读读与管道有关的内核源码的,比如pipe()
管道用法举例:
- 打印/usr/lib目录下的内容,按大小排序,并分页显示行号
- 取出历史登录信息中的用户名,排序、去重并计数
- 杀掉所有正在运行的redis-cli进程
文章插图
这说明kill命令没有接收到应有的参数 。还有很多命令(比如最常见的mkdir、rm、cp等等等)都不会从标准输入读取内容,这时如果在管道符后加上xargs,再加上要执行的命令,那么前一个程序的标准输出就会作为后一个程序的参数,而不是标准输入了 。
文章插图
Dash软件中xargs命令的man page
看官可以尝试执行以下两对命令,看看输出有什么不同,能够加深理解:
- echo '--help' | cat与echo '--help' | xargs cat
- 随便找一个Spring项目的代码目录,分别执行find . -name '*.JAVA' | grep Impl与find . -name '*.java' | xargs grep Impl
ps aux | grep redis-cli | grep -v grep | awk '{print $2}' | xargs kill -15xargs命令本身也有一些参数,使用方法很灵活,下面再举几个例子 。
- 自定义分隔符
- xargs默认用IFS(inner field separator,即内部域分隔符,包含空格、制表符、换行符)分割上一个程序的标准输出 。如果要用其他分隔符,可以用-d参数,例如:
- 分批传参
- 用-n参数可以规定每次传递多少个参数给后面的命令,它可以单用,也可以与-d配合使用,例如:
- 指定终止符
- 用-E参数可以指定xargs在遇到哪个字符串时停止解析(不含该字符串) 。-E不能与-d同用,例如:
- 交互式执行
- 用-p参数就会在每次执行命令之前询问,输入y(yes)才会真正执行 。如果只是想观察命令本身,可以用-t参数 。例如:
- 指定替换参数位置
- xargs接收的参数默认会分配到下一个命令的结尾,即追加 。如果想要指定替换的参数位置,可以用-I或者-i参数 。其中,-i固定用双大括号{}作为占位符,-I则可以自行指定其他符号作为占位符 。这个东西很有用,例如:
作者:LittleMagic
链接:https://www.jianshu.com/p/0aa07a901825
来源:简书
【Linux中的xargs命令】
推荐阅读
- Java中的HashCode方法与内存泄漏问题,你了解过吗?
- python中的列表与元组
- 粽子配茶中的学问
- 探究水浒传中的情节 水浒传的问题有哪些
- 日常生活中的茶保健
- 淘宝规则中的雷区有哪些 淘宝新手常犯的六大规则
- 你手中的国产老手表收藏意义吗
- 二 豉酒方的功效与作用
- 茶叶中的哪些成分让你健康
- 如何用 Linux 命令行工具解析和格式化输出 JSON