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.
时间: 2024-10-14 11:42:20

xargs参数代换的相关文章

shell(十三)参数代换

shell参数代换xargs. 产生命令的参数 1. cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs finger 2. 执行前询问用户 cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -p finger 如果直接按回车就退出 3. 指定查阅参数个数 cut -d ':' -f 1 /etc/passwd | xargs -p -n 5 finger 4. 指定遇到某字符串就结束 cut -d ':'

【Linux】参数代换命令xargs

xargs 是在做什么的呢?就以字面上的意义来看,x 是加减乘除的乘号,args 则是 arguments (参数) 的意思,所以说,这个玩意儿就是在产生某个命令的参数的意思! xargs 可以读入 stdin 的数据,并且以空格符或断行字符作为分辨,将 stdin 的数据分隔成为 arguments . 因为是以空格符作为分隔,所以,如果有一些档名或者是其他意义的名词内含有空格符的时候, xargs 可能就会误判了-他的用法其实也还蛮简单的!就来看一看先! [[email protected]

linux参数代换,查询登陆用户指令

xargs  [-0epn] command:生成某个指令的参数,参数: 1)-0:如果输入stdin含有特殊字符,例如',\,空格时,该参数可以将它还原成一般的参数 2)-e:eof,后面接一个字符串,当xargs分析到这个字符串时,就会停止继续执行(该指令会被执行). 3)-p:在执行每个指令的argument时,都会询问使用者 4)-n:后面接次数,每次command指令执行时,要使用几个参数.即指令分批执行,每批调用几个参数. 2.finger  [-slp] [用户@主机名]:查询当前

xargs参数位于指定位置。

xargs通常配合管道使用,将前面命令产生的参数,逐个传入后续命令,作为参数.比如: $ ls *1223.log | xargs rm xargs传来的参数,默认位于 xargs 后面命令的最后,若需要将参数传入指定位置,需要加 -I 参数,比如像将 *1223.log 移动到 log_1223 的目录下: $ ls *1223.log | xargs -I {} mv {} log_1223 原文地址:https://www.cnblogs.com/minglee/p/12095952.ht

【linux】学习5

鸟哥那本书第11章的内容 管理整个计算机硬件的是操作系统的内核(kernel),内核是需要保护的,我们一般用户只能通过shell来跟内核通信.Shell是用户操作系统的接口 cat  /etc/passwd   :可以查看每个账号登陆后默认的shell ~/.bash_history 中记录了前一次登陆以前使用过的命令 type 可以查询命令是bash内置命令 还是 外部命令 一下子写两行命令, 用 \[Enter]转义 变量 1. 显示变量内容: echo $变量名 echo ${变量名}  

认识和学习shell

认识和学习shell Linux使用的shell版本名为“Bourne Again SHell(简称bash)”,这个shell是Bourne SHell的增强版本,也是基于GNU的架构发展来的 bash shell的功能 1.命令记忆功能:他能够记忆使用过的命令,命令记录在主文件夹内的.bash_history中.注意:~/.bash_history记录的是前一次登陆以前所执行的命令,而这一次登陆所执行的命令则暂存在临时内存中.当注销系统后,这些命令才回被记录到.bash_history中.

grep命令参数列表过长?我们还有find、xargs和grep

一.问题 捞取当前目录中指定子目录下指定服务器指定时间范围内所有包含有"功勋获取"的日志内容 1.指定子目录 1.2.3.25 .... 1.2.3.83 2.指定服务器 该服务器的日志的文件名格式为: sceneserver.log.(年的后两位,两位数)(月份,不够用0补,两位数)(日,不够用0补,两位数)-(小时,不够用0补,两位数) 如2014年1月22号16点的日志文件名为:sceneserver.log.140122-16 3.指定时间范围 从2014年10月22到2014

Linux管线命令 - cut,grep,sort,uniq,wc,tee,tr,col,join,paste,expand,split,xargs

在每个管线后面接的第一个数据必定是『命令』喔!而且这个命令必须要能够接受 standard input 的数据才行,这样的命令才可以是为『管线命令』,例如 less, more, head, tail 等都是可以接受 standard input 的管线命令啦.至于例如 ls, cp, mv 等就不是管线命令了!因为 ls, cp, mv 并不会接受来自 stdin 的数据. 也就是说,管线命令主要有两个比较需要注意的地方: 管线命令仅会处理 standard output,对于 standar

Xargs的用法和理解

用途: 关于这个命令的诞生是由于管道输出不能支持有些命令于是需要用到xargs:例如 find /sbin -perm +700 |ls -l       这个命令是错误的 find /sbin -perm +700 |xargs ls -l   这样才是正确的 语法及参数 xargs -参数 +命令 -0 当sdtin含有特殊字元时候,将其当成一般字符,想/'空格等 例如:[email protected]:~/test#echo "//"|xargs  echo [email pr