linux命令之 玩转xargs

我们可以用管道将一个命令的标准输出重定向到另一个命令的标准输出,但是有些命令只能以命令行参数的形式接收数据,而无法接受通过stdin的数据,这个时候我们就要用到xargs。
xargs应该紧跟管道操作符之后。

1.将多行转换为单行,将单行转换为多行。
[root@localhost 桌面]# cat show.txt 
wang
Hunan Chenzhou
123456

li
Guangzhou Zhuhai
654321

[root@localhost 桌面]#  cat show.txt | xargs
wang Hunan Chenzhou 123456 li Guangzhou Zhuhai 654321
[root@localhost 桌面]#  cat show.txt | xargs -n 4
wang Hunan Chenzhou 123456
li 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/bash
echo $*'OK'
[root@localhost 桌面]# chmod +x ceshi.sh 
[root@localhost 桌面]#  cat show.txt | xargs -n 1 ./ceshi.sh 
wangOK
HunanOK
ChenzhouOK
123456OK
liOK
GuangzhouOK
ZhuhaiOK
654321OK
[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 -l
8 show.txt
[root@localhost 桌面]$  file * | grep show | cut -d ":" -f1 |xargs -t wc -l
wc -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 {} {}.bak
mv show.txt show.txt.bak 
修改名字
[root@localhost 桌面]$  find . -name "*.txt" -type f -print0 | xargs -0 tar -zcvf text.tar.gz
查找所有txt文件,并压缩它们。
其实xargs可以接很多命令,发现它们你会觉得非常有趣。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值