xargs--命令行输入参数

◆ 作用:把从标准输入接收到的数据重新格式化,再将其作为参数重新提供给其它命令。

◆ 示例:

◆ 把命令的输出转换成一行显示

[root@web2]# MegaCli -PDList -aAll|grep -E 'Slot Number:|Raw Size:|Firmware state:'|awk   '{print $3}'|xargs
4 286102MB Unconfigured(good) 5 286102MB Unconfigured(good) 0 140014MB Online 1 140014MB Online 2 140014MB Online 3 140014MB Online

◆ 把命令输出的一行内容转换成多行显示
[root@web2]# cat dell_diskstats.txt |awk   '{print $3}'|xargs -n 3|sort
0 140014MB Online
1 140014MB Online
2 140014MB Online
3 140014MB Online
4 286102MB Unconfigured(good)
5 286102MB Unconfigured(good)

◆ 将输入转换成一列参数
tom@Ubuntu:$cat example.txt
1 2 3 4 5
6 7 8 9 10
tom@Ubuntu:$cat example.txt | xargs
1 2 3 4 5 6 7 8 9 10
◆ 单行输入转换成多行输出(-n)
tom@Ubuntu:$cat example.txt | xargs -n 2
1 2
3 4
5 6
7 8
9 10
◆ 使用自定义定界符分隔参数(-d)
tom@Ubuntu:$echo "TomXisXaXboy." | xargs -d X
Tom is a boy.
◆ 读取 stdin,将格式化参数传递给命令
以下为可执行脚本内容,作用为显示它的每一个参数:
tom@Ubuntu:$cat cecho.sh
#!/bin/bash
#File name: cecho.sh
#Description: This shell shows how to use xargs.
echo $* '#'
tom@Ubuntu:$./cecho.sh arg1 arg2 arg3
arg1 arg2 arg3 #
以下是 args 的使用示例 :
tom@Ubuntu:$cat args.txt | xargs -n 1 ./cecho.sh
arg1 #
arg2 #
arg3 #
tom@Ubuntu:$cat args.txt | xargs -n 2 ./cecho.sh
arg1 arg2 #
arg3 #
通过以下方式可以知道,这样是一次带不超过最大个数(-n 指定)的参数的一次或者多次执行:
tom@Ubuntu:$cat args.txt | xargs -n 2 bash -x ./cecho.sh
+ echo arg1 arg2 '#'      ---- 执行的第一个命令
arg1 arg2 #
+ echo arg3 '#'                ---- 执行的第二个命令
arg3 #
下面这个就是带三个参数的一次执行了:
tom@Ubuntu:$cat args.txt | xargs bash -x ./cecho.sh
+ echo arg1 arg2 arg3 '#'
arg1 arg2 arg3 #
对于带有多个参数,且只有一个会变化的参数,其它不变的,可以使用 xargs 的 -I 选型,指定替换字符串,实现命令对于每一个参数的一次执行(由结果可见,效果是每次一个参数的一次执行):
tom@Ubuntu:$cat args.txt | xargs -I {}  bash -x ./cecho.sh -p {} -I  
+ echo -p arg1 -I '#'        ---- 替换为第一个参数执行一次
-p arg1 -I #
+ echo -p arg2 -I '#'        ---- 替换为第二个参数执行一次
-p arg2 -I #
+ echo -p arg3 -I '#'        ---- 替换为第三个参数执行一次
-p arg3 -I #
◆  使用 xargs 进行统计
统计文件行数,如统计 source 目录下所有 .c 文件的行数。
tom@Ubuntu:$find . -type f -name "*.c" -print0 | xargs -0 wc -l
  4 ./test2.c
  4 ./test3.c
 16 ./file_oper.c
 24 总用量
-print0 将 \0 作为 find 找到的每一个结果的结束符,即 find 找到的结果将以 \0 分界,而不是 \n,-0 则用来识别 \0 这个定界符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值