xargs用法详解

简介

xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具,它擅长将标准输入数据转换成命令行采纳数。xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以单行或多行文本输入转换为其他格式,例如多行转单行,单行转多行。xargs的默认命令是echo,空格是默认定界符。

命令格式

xargs [选项] [command]

选项说明

-0:如果输入的stdin含有特殊字符,例如反引号`、反斜杠\、空格等字符时,xargs可以将它还原成一般字符。为xargs的默认选项。
-e <flag>,-E <flag>,--eof=<eof-str>:eof是end of file string的意思。flag可以是一个字符串或者是由空格分隔的多个字符串,当xargs分析到这个flag时,就会停止工作。
-p:当每次执行一个argument的时候询问一次用户。
-n <num>:表示命令在执行的时候一次使用的argument的个数,由num指定,默认是用所有的参数。
-t:表示先打印命令,然后再执行。
-a <file>:从文件中读入作为sdtin。
-i,-I:其中-I某些Linux版本不支持。将xargs的输出每一项参数,单独赋值给后面的命令,参数需要用{}代替。见示例3。
-r:或者--no-run-if-empty,当xargs的输入为空的时候则停止xargs,不用再去执行后面的命令了,-r是xargs的默认选项。
-s <num>:命令行的最大字符数,指的是xargs后面那个命令的最大命令行字符数,包括命令、空格和换行符。每个参数单独传入xargs后面的命令。见示例4。
-L <line_num>:设置标准输入中最大的行数作为命令每一次执行的参数。见示例5。
-d <delim>, --delimiter=<delim>: xargs处理标准输入默认是按换行符和空格作为分隔符,输出arguments的分隔符是空格,这里修改xargs处理标准输入时的分隔符。
-x:eXit的意思,主要是配合-s使用,当命令行字符数大于-s指定的数值时,退出xargs。
-P:修改最大的进程数,默认是1,为0时候为as many as it can。该选项比较少用,目前还不清楚该用法。

基本语法

多行换入单行输出
cat test.txt | xargs
-n 选项多行输出
cat test.txt  | xargs -n3
-d 自定义定界符
echo "abcadbsbdkvbwwlg" | xargs -db
读取stdin,将格式化后的参数传递给命令
 ps -aux| grep "nginx" | awk {'print $2'}| xargs kill -9
设置xargss读入参数时的结束标识符。
echo 01234,233 | xargs -E "," 
设置标准输入中每次多少行作为命令的参数,默认是将标准输入中所有行的归并到一行一次性传给命令执行。
    [root@localhost ~]#  echo -e "01234\n56789\n01234" | xargs -t -L 2 echo
    echo 01234 56789 
    01234 56789
    echo 01234 

01234

xagrs的一个选项-I,使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次。
#!/bin/bash
#sk.sh命令内容,打印出所有参数。

echo $*
arg.txt文件内容:

cat arg.txt

aaa
bbb
ccc
cat arg.txt | xargs -I {} ./sk.sh -p {} -l
-p aaa -l
-p bbb -l
-p ccc -l

1find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值