【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 '----'{}'---------'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM