zoukankan      html  css  js  c++  java
  • 【shell】xargs用法说明

    1.xargs简介

    在我们日常使用Linux的过程中,经常使用到管道命令,类似ps -ef |grep java,该命令是查看Java进程的命令,其原理就是:将一个命令的标准输出(stdout)重新定向到另外一个命令的标准输入(stdin)。
    但是,有时候我们有些特殊的操作,例如需要获取text.txt文件的绝对路径:ls `pwd`/text.txt,这种使用反引号执行命令的方式是最简单的。但是还有另外一种方法,那就是:pwd | xargs -I {} ls {}/test.txt,这是一个简单的实用案例。

    xargs的工作原理:该命令接收来自stdin的输入,并将其解析为单个元素,然后调用指令并将这些元素作为该命令的参数。xargs默认使用空白字符分割输入并执行/bin/echo

    现有test.txt的文本内容如下:

    2.默认echo

    默认的echo参数会将多行输入转换成单行输出

    [root@hdp-04 day10]# cat test.txt | xargs
    a b c d e f g
    

    3.-n选项

    xargs的-n选项可以限制每次调用命令时候用到的参数个数。下面是将参数分割为多行,并且每行有M个元素

    [root@hdp-04 day10]# cat test.txt | xargs -n 2
    a b
    c d
    e f
    g
    
    

    4.-d选项

    -d选项用于自定义分隔符

    [root@hdp-04 day10]# echo 'str1@str2@str3' | xargs -d '@'
    str1 str2 str3
    
    

    5.通过文件控制参数传入

    现有如下两个文件:

    [root@hdp-04 day10]# cat tryParam.sh 
    echo $* 'end;'
    
    [root@hdp-04 day10]# cat param.txt 
    param1
    param2
    param3
    param4
    
    
    1. 现在需要将param.txt中的参数逐个传给tryParam.sh文件并执行
    [root@hdp-04 day10]# cat param.txt | xargs -n 1 sh tryParam.sh 
    param1 end;
    param2 end;
    param3 end;
    param4 end;
    
    
    1. 现在需要将param.txt中的参数每次传2个给tryParam.sh文件并执行
    [root@hdp-04 day10]# cat param.txt | xargs -n 2 sh tryParam.sh 
    param1 param2 end;
    param3 param4 end;
    
    

    3)将所有参数一次性传给tryParam.sh文件并执行

    [root@hdp-04 day10]# cat param.txt | xargs sh tryParam.sh 
    param1 param2 param3 param4 end;
    

    在上面的3个案例中,没有涉及到固定的参数,但是在实际使用的过程中,我们可能需要定义固定参数。

    例如:在案例1中需要在每一次调度都需要添加一个-f参数

    [root@hdp-04 day10]# cat param.txt | xargs -I {} sh tryParam.sh -f {}
    -p param1 end;
    -p param2 end;
    -p param3 end;
    -p param4 end;
    
    

    使用-I参数的时候,命令以循环的方式执行,{}会在每次执行中被替换为相应的参数。

    6.while子句的一个巧妙用法

    [root@hdp-04 day10]# cat param.txt | (while read param;do echo '----'$param'---------';done)
    ----param1---------
    ----param2---------
    ----param3---------
    ----param4---------
    # 上述语法等同于cat param.txt | xargs -I {} echo '----'{}'---------'
    
  • 相关阅读:
    转 博客园 各种大牛合集
    系统学习qsort1 尤其partition
    转 大整数乘法 1 复杂度分析
    【转】如何设计一个LRU Cache?
    转微软大牛 13道链表操作
    框架设计之旅(1)--数据的分层
    框架设计之旅(2)--数据分层之实际应用
    DB2相关问题及解决方法:
    框架设计之旅--启航篇
    如何挑选水货诺基亚手机
  • 原文地址:https://www.cnblogs.com/OliverQin/p/12291021.html
Copyright © 2011-2022 走看看