xargs参数代换

简介:

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

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

1
2
3
4
5
6
7
8
[whx@localhost ~]$  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的输入参数。

 

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

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
[whx@localhost ~]$  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后的命令是输出提示信息询问用户是否执行该命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[whx@localhost ~]$  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命令输出为止。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[whx@localhost ~]$  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这个字符串时停止工作。所以这条命令只输出了第一个用户的信息就结束了。

1
2
3
4
5
6
7
8
[whx@localhost ~]$  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.



本文转自 天黑顺路 51CTO博客,原文链接:http://blog.51cto.com/mjal01/1959298,如需转载请自行联系原作者
相关文章
|
5月前
|
Unix Java Linux
Linux脚本中的字符处理与awk编程|WC统计
Linux脚本中的字符处理与awk编程|WC统计
90 0
|
Linux Perl
解决脚本实现:sed -i 替换变量,变量中含有特殊转义字符的问题
解决脚本实现:sed -i 替换变量,变量中含有特殊转义字符的问题
解决脚本实现:sed -i 替换变量,变量中含有特殊转义字符的问题
|
Shell
SHELL中变量字串中包含$时怎么办?
SHELL中变量字串中包含$时怎么办?
132 0
|
Linux Perl
LINUX使用sed,字串中包含特殊字符怎么办?
LINUX使用sed,字串中包含特殊字符怎么办?
149 0
|
Oracle 关系型数据库 Shell
[20180131]bash变量替换与截取.txt
[20180131]bash变量替换与截取.txt --//bash编程经常用到变量替换与截取,经常记不住,做一些例子说明: $ a=1a1b1c1d $ echo $a 1a1b1c1d $ echo ${a##*1} d $ echo ${a...
1179 0
|
机器学习/深度学习 Shell