xargs参数代换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xargs参数代换相关的知识,希望对你有一定的参考价值。

xargs 的作用是产生命令需要的参数,主要是用于在命令结合管道的使用中给一些不支持管道的命令提供输入参数。

例如:利用find找出~ 目录下由特殊权限的文件,并用ls命令列出文件列表:

[[email protected] ~]$ find ~ -perm +7000 | ls-l
total 128
drwxr-xr-x. 2 whx whx 4096 Jul 19 09:44 Desktop
drwxr-xr-x. 2 whx whx 4096 Jul 19 09:44 Documents
drwxr-xr-x. 2 whx whx 4096 Jul 19 09:44 Downloads
-rwSrwSr-T. 1 whx whx 4057 Aug 24 19:21 man.config.b
-rw-rw-r--. 1 whx whx 4057 Aug 24 19:21 man.config.c
…

上面的命令虽然列出了文件列表,其中包含了具有特殊权限的文件,但是我们的本意是只列出具有特殊权限的文件列表,而不是该目录下的所有文件。导致这个结果不符合预期结果的原因是ls命令不支持管道。这种情况下可以是xargs来将管道符前面的输出转换为ls的输入参数。

 

[[email protected]~]$ find ~ -perm +7000 |xargs ls -l
-rwSrwSr-T. 1 whx whx 4057 Aug 24 19:21/home/whx/man.config.b

 

利用xargs将管道符前命令的输出作为finger的输入参数:

[[email protected] ~]$ cut -d ‘:‘ -f 1/etc/passwd | head -n 2 | xargs finger
Login: root                             Name: root
Directory: /root                        Shell: /bin/bash
Never logged in.
New mail received Thu Aug 24 19:09 2017(PDT)
    Unread since Wed Jul 19 10:33 2017 (PDT)
No Plan.
 
Login: bin                              Name: bin
Directory: /bin                         Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.

添加 -p参数在执行xargs后的命令是输出提示信息询问用户是否执行该命令:

[[email protected] ~]$ cut -d ‘:‘ -f 1/etc/passwd | head -n 2 | xargs -p finger
finger root bin ?...y
Login: root                             Name: root
Directory: /root                        Shell: /bin/bash
Never logged in.
New mail received Thu Aug 24 19:09 2017(PDT)
    Unread since Wed Jul 19 10:33 2017 (PDT)
No Plan.
 
Login: bin                              Name: bin
Directory: /bin                         Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.

 

添加-n 2参数表示finger命令每次执行时只有2个参数,即每次值输出2个用户的信息,finger命令每次执行之前会询问用户是否执行,每输出2个用户信息后敲击回车,会再次询问用户,知道输入参数中用户信息全部被finger命令输出为止。

[[email protected] ~]$ cut -d ‘:‘ -f 1/etc/passwd | xargs -p -n 2 finger           
finger root bin ?...y
finger daemon adm ?...Login: root                               Name: root
Directory: /root                        Shell: /bin/bash
Never logged in.
New mail received Thu Aug 24 19:09 2017(PDT)
    Unread since Wed Jul 19 10:33 2017 (PDT)
No Plan.
 
Login: bin                              Name: bin
Directory: /bin                         Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.
 
finger lp sync ?...y
finger shutdown halt ?...Login: lp                              Name: lp
Directory: /var/spool/lpd               Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.
 
Login: sync                             Name: sync
Directory: /sbin                        Shell: /bin/sync
Never logged in.
No mail.
No Plan.

 

添加-e参数设置遇到某个字符串时让xrags停止工作。

例如从上面的命令可以看出第二个用户名为bin,所以不添加-e’bin’ 参数时下面的命令会一次输出4个用户的信息,并且每次执行都会询问用户是否执行finger命令,但是设置-e’bin‘参数使得xargs遇到bin这个字符串时停止工作。所以这条命令只输出了第一个用户的信息就结束了。

[[email protected] ~]$ cut -d ‘:‘ -f 1/etc/passwd | xargs -p -e‘bin‘ -n 4 finger
finger root ?...y
Login: root                             Name: root
Directory: /root                        Shell: /bin/bash
Never logged in.
New mail received Thu Aug 24 19:09 2017(PDT)
    Unread since Wed Jul 19 10:33 2017 (PDT)
No Plan.


本文出自 “天黑顺路” 博客,请务必保留此出处http://mjal01.blog.51cto.com/12140495/1959298

以上是关于xargs参数代换的主要内容,如果未能解决你的问题,请参考以下文章

7.多关联双亲染色体片段代换系(CSSL)群体的代谢组分析

Linux好用的管道命令

tip140参数及代换

shell开发快速入门

xargs命令转换管道输入为命令参数

Linux下使用xargs得到字符串作为参数进行输出awk得到字符串作为参数进行输出