我们可以用管道将一个命令的标准输出重定向到另一个命令的标准输出,但是有些命令只能以命令行参数的形式接收数据,而无法接受通过stdin的数据,这个时候我们就要用到xargs。xargs应该紧跟管道操作符之后。
1.将多行转换为单行,,将单行转换为多行。
[root@localhost 桌面]# cat show.txt wangHunan Chenzhou123456
liGuangzhou Zhuhai654321
[root@localhost 桌面]# cat show.txt | xargswang Hunan Chenzhou 123456 li Guangzhou Zhuhai 654321[root@localhost 桌面]# cat show.txt | xargs -n 4wang Hunan Chenzhou 123456li Guangzhou Zhuhai 654321
2.定界符,使用-d 选项
[root@localhost 桌面]# cat show.txt | xargs -d “\n”wang Hunan Chenzhou 123456 li Guangzhou Zhuhai 654321
3.读取stdin,将格式化参数传递给命令(一个或多个)
[root@localhost 桌面]# vi ceshi.sh#!/bin/bashecho $*’OK'[root@localhost 桌面]# chmod +x ceshi.sh
[root@localhost 桌面]# cat show.txt | xargs -n 1 ./ceshi.sh wangOKHunanOKChenzhouOK123456OKliOKGuangzhouOKZhuhaiOK654321OK
[root@localhost 桌面]# cat show.txt | xargs ./ceshi.sh wang Hunan Chenzhou 123456 li Guangzhou Zhuhai 654321OK
4.传递复杂的命令参数(可变,不可变参数)-I选项替换字符[root@localhost 桌面]# cat show.txt | xargs -I {} ./ceshi.sh -p {} -1-p wang -1OK-p Hunan Chenzhou -1OK-p 123456 -1OK-p li -1OK-p Guangzhou Zhuhai -1OK-p 654321 -1OK
5.xargs结合其他命令的用法
[root@localhost 桌面]# file * | grep show | cut -d “:” -f1 | xargs wc -l8 show.txt
[root@localhost 桌面]$ file * | grep show | cut -d “:” -f1 |xargs -t wc -lwc -l show.txt 8 show.txt-t选项,先打印命令,然后再执行[root@localhost 桌面]# file * | grep show | cut -d “:” -f1 | xargs vi 打开vi编辑器[root@localhost 桌面]# file * | grep show | cut -d “:” -f1 | xargs -t -i mv {} {}.bakmv show.txt show.txt.bak 修改名字[root@localhost 桌面]$ find . -name “*.txt” -type f -print0 | xargs -0 tar -zcvf text.tar.gz查找所有txt文件,并压缩它们。其实xargs可以接很多命令,发现它们你会觉得非常有趣。
努力爱一个人。付出,不一定会有收获;