xargs命令可以通过管道接受字符串,并将接收到的字符串通过空格分割成许多参数(默认情况下是通过空格分割) 然后将参数传递给其后面的命令,作为后面命令的命令行参数
常用参数
-
-d 选项(此选项macOsx系统不支持)
默认情况下xargs将其标准输入中的内容以空白(包括空格、Tab、回车换行等)分割成多个之后当作命令行参数传递给其后面的命令,并运行之,我们可以使用 -d 命令指定分隔符,例如:
echo '11@22@33' | xargs echo
输出:11@22@33
echo '11@22@33' | xargs -d '@' echo
输出:11 22 33
指定以@符号分割参数,所以等价于 echo 11 22 33 相当于给echo传递了3个参数,分别是11、22、33 -
-p 选项
使用该选项之后xargs并不会马上执行其后面的命令,而是输出即将要执行的完整的命令(包括命令以及传递给命令的命令行参数),询问是否执行,输入 y 才继续执行,否则不执行。这种方式可以清楚的看到执行的命令是什么样子,也就是xargs传递给命令的参数是什么,例如:
echo '11@22@33' | xargs -p -d '@' echo
输出:echo 11 22 33
?...y ==>这里询问是否执行命令 echo 11 22 33 输入y并回车,则显示执行结果,否则不执行
11 22 33 ==>执行结果 -
-n 选项
该选项表示将xargs生成的命令行参数,每次传递几个参数给其后面的命令执行,例如如果xargs从标准输入中读入内容,然后以分隔符分割之后生成的命令行参数有10个,使用 -n 3 之后表示一次传递给xargs后面的命令是3个参数,因为一共有10个参数,所以要执行4次,才能将参数用完。例如:
echo '11@22@33@44@55@66@77@88@99@00' | xargs -d '@' -n 3 echo
输出结果:
11 22 33
44 55 66
77 88 99
00
等价于:
echo 11 22 33
echo 44 55 66
echo 77 88 99
echo 00
实际上运行了4次,每次传递3个参数,最后还剩一个,就直接传递一个参数。 -
-E 选项,有的系统的xargs版本可能是-e eof-str
该选项指定一个字符串,当xargs解析出多个命令行参数的时候,如果搜索到-e指定的命令行参数,则只会将-e指定的命令行参数之前的参数(不包括-e指定的这个参数)传递给xargs后面的命令
echo '11 22 33' | xargs -E '33' echo
输出:
11 22
可以看到正常情况下有3个命令行参数 11、22、33 由于使用了-E '33' 表示在将命令行参数 33 之前的参数传递给执行的命令,33本身不传递。等价于 echo 11 22 这里-E实际上有搜索的作用,表示只取xargs读到的命令行参数前面的某些部分给命令执行。
注意:-E只有在xargs不指定-d的时候有效,如果指定了-d则不起作用,而不管-d指定的是什么字符,空格也不行。 -
-t 选项
表示先打印命令,然后再执行
linux litao$ echo 11 22 33 44 55 66 77 88 99 00 | xargs -t -n 3 echo
输出:
echo 11 22 33
11 22 33
echo 44 55 66
44 55 66
echo 77 88 99
77 88 99
echo 00
00 -
-i 或者是-I 选项 这得看linux支持了
将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
echo 1 | xargs -I {} grep {} grep/b.text
输出:
10
1
注:这里-I 指定 {} 字符替换管道命令标准输出内容(若支持-i 则不需要指定可直接用:echo 1 | xargs -i grep {} grep/b.text)。
//b.text
10
20
30
9
8
1
22
33
hello word
- -L/l num 选项
从标准输入一次读取 num 行送给 command 命令。
//file.text
a.text
b.text
c.text
grep 目录下有file.text,a.text,b.text三个文件
cat grep/file.text | xargs -L1 find . grep -name
输出:
./grep/a.text
grep/a.text
./grep/b.text
grep/b.text
- -x exit的意思,主要是配合-s使用
- -P 修改最大的进程数,默认是1,为0时候为as many as it can ,这个例子我没有想到,应该平时都用不到的吧
网友评论