linux之xargs命令
前面文章专门介绍管道符时候提到过,一般情况下,处理文本的命令和工具均支持管道符,像rm、kill等命令则不支持管道符。但是有时候我们想要管道符支持这些命令,例如执行
ls *.sh | rm -rf 找出所有.sh类型的文件并且删除
ps -ef | grep "hello.sh" | awk '{print $2}' | kill 杀死包含"hello.sh"进程
实际上这些命令都是无法执行的,这时候就需要用到xargs命令与管道结合使用才能实现。
xargs的作用是接收管道符前面命令的输出进行处理后作为命令行参数传递给后续命令,而并不是作为标准输入传递给后续命令。
首先在这里再次解释一下命令行参数和标准输入的区别
- 命令行参数
命令行参数就是命令后面的参数
例如rm hello.sh
,rm是命令,hello.sh就是命令行参数
例如cat a.txt
, cat是命令,a.txt就是命令行参数 - 标准输入
管道符之前命令的输出结果(即打印在屏幕的文本)作为之后命令的标准输入
举个栗子:
cat a.txt | sort
这个命令是先查看a.txt文件然后对输出的内容进行排序,后面sort命令要处理的内容就是前面cat命令输出的内容,即cat命令的标准输出作为sort命令的标准输入,这个命令等价于sort a.txt
1.举个栗子来展示一下xargs的神奇作用:
有如下两个文件a.txt 和b.txt
[root@linuxforliuhj test]# ls *.txt
a.txt b.txt
[root@linuxforliuhj test]# cat a.txt
aaaa
dddd
cccc
bbbb
[root@linuxforliuhj test]# cat b.txt
1111
3333
4444
2222
[root@linuxforliuhj test