xargc命令
1、xargc命令:给其他命令传递参数的一个过滤器;组合多个命令的一个工具。
xargs命令可以通过管道接受字符串,并且将接收到的字符串通过空格分割(默认情况下时空格分割)成许多的参数,然后将参数传递给后面的命令,作为后面的命令的命令行参数。
2、一个命令获取参数一般有两种情况:通过命令行参数或者标准输入。
Linux中很多命令都是从命令行参数中获取参数,然后从标准输入中读取,反映在程序中,
<1>命令行参数是通过main(int argc,char* argv[],char* envp[])的参数中获得的,
<2>而标准输入则是通过通过标准输入函数(scanf)读取到的,它们获取的地方不一样。标准输入是有缓冲区的,
(1)、cat和管道一起使用:
当cat后面有参数时,不去标准输入中读:
a.txt存在时,直接读取
当b.txt文件不存在时,cat提示文件不存在
下面这条从标准输入中读取
用参数-来指定去从标准输入中读取
直接使用cat,程序等待输入,此时也是从标准输入中得到的内容
只是显示a.txt中的内容,虽然指定了-去标准输入里去读,结果却只在文件中进行了读取。
当使用echo 'hello' | grep a.txt - 时,grep会同时处理标准输入中的hello也会从a.txt中搜索。
cat和grep的不同就在于当指定了-选项时(既要去标准输入中读取时),当cat后有文件时,只会读文件内的内容,而grep标准输入里的内容和文件里的内容都会处理。
(2)、xargs和管道的使用及对比
对比
(3)、xargs的用法:
①默认情况下xargs将其标准输入中的内容以空格(包括Tab、回车换行)分割成多个,然后当做命令行参数传递给其后面的命令。
②-d选项,用于指定分割符。
③-p选项,使得xargs命令不会马上执行后面的命令,而是输出即将要执行的完整命令(包括命令以及传递给命令的命令行参数)来询问是否执行,只有输入y才能继续执行。
④-n选项,用于将xargs产生的命令行参数,每次传递n个给后面的命令执行。
⑤-E选项,指定一个字符串,当解析出很多命令行参数的时候,如果搜索到-E所指定的命令行参数时,则只会将-E指定的命令行参数之前的传递给后面的命令。
但是-E选项在-d选项存在时不起作用
⑥与find命令一起使用
find默认情况下输出结果是每条记录后面加上换行符
(4)、总结:
管道是实现将前面的标准输出作为后面的标准输入!
xargs是将标准输入作为命令行参数!