Linux 基礎教程 42 xargs命令

2022-03-05 23:56:00 字數 4128 閱讀 8066

xargs是execute arguments的縮寫,主要作用是從標準輸入中讀取內容,並將此內容傳遞給它要協助的命令,並作為要協助命令的引數來執行

基本語法

xargs [選項] [命令]
其常用選項如下:

選項說明

--null ,-0

允許將null作為分隔符

-a file

從檔案讀取項而非標準輸入

-d delim

指定分隔符

-p ,--interactive

交換模式,在執行命令,需要使用者確認是否執行

-n max-args

用於指定每次傳遞多少個引數給其後面的命令

-e eof-str

指定命令結束識別符號

-e eof-str

同 -e eof-str

-i 將replace-str替換為從標準輸入裡讀入的名稱

-i 功能同-i

與管道的區別

我們先來看看兩個例子:

[root@localhost ~]# cat test.txt

this is test text.

[root@localhost ~]# echo test.txt | cat

test.txt

[root@localhost ~]# echo test.txt | xargs cat

this is test text.

[root@localhost ~]# echo "--help" | cat

--help

[root@localhost ~]# echo "--help" | xargs cat

用法:cat [選項]... [檔案]...

將[檔案]或標準輸入組合輸出到標準輸出。

-a, --show-all 等於-vet

-b, --number-nonblank 對非空輸出行編號

-e 等於-ve

-e, --show-ends 在每行結束處顯示"$"

-n, --number 對輸出的所有行編號

-s, --squeeze-blank 不輸出多行空行

-t 與-vt 等價

-t, --show-tabs 將跳格字元顯示為^i

-u (被忽略)

-v, --show-nonprinting 使用^ 和m- 引用,除了lfd和 tab 之外

從上面的例子,我們可以總結如下結論:

在linux中的很多命令都是可以先從命令列引數中獲取引數,然後從標準輸入讀取,最後通過標準輸出顯示結果。而如果想要實現將前面的標準輸出做為後面命令的命令引數,則需要使用命令xargs

示例用法

1、-d選項

[root@localhost ~]# echo '2018-08-11' | xargs echo

2018-08-11

[root@localhost ~]# echo '2018-08-11' | xargs -d '-' echo

2018 08 11

2、-p選項

[root@localhost ~]# echo '2018-08-11' | xargs -d '-' -p echo

echo 2018 08 11

?...y

2018 08 11

3、-n選項

[root@localhost ~]# echo '2018-08-11' | xargs -d '-' -n 1 echo

2018

0811

上述示例中表示xargs每次僅從標準輸入傳遞乙個引數給後面的命令,被分隔後的引數為3個,因此顯示為3行。

4、-e選項

[root@localhost ~]# echo '2018 08 11' | xargs  -e '08' echo

2018

[root@localhost ~]# echo '2018-08-11' | xargs -d '-' -e '08' echo

2018 08 11

當xargs解析出多個命令列引數時,如果搜尋到-e指定的命令列引數,則終止並退出。需要注意的是 -e 引數只有在不指定 -d 的時候才有效5、-0選項

-0 選項表示以'\0'為分隔符,一般常與find結合使用

[root@localhost test]# find . -name '*.txt'

./1.txt

./2.txt

./3.txt

./4.txt

./test.txt

# 預設情況find的結果中每條記錄中會新增乙個換行符

[root@localhost test]# find . -name '*.txt' -print0

./1.txt./2.txt./3.txt./4.txt./test.txt

# print0表示顯示的輸出結果後面增加'\0'而不是換行符

[root@localhost test]# find . -name '*.txt' -print0 | xargs -0 echo

./1.txt ./2.txt ./3.txt ./4.txt ./test.txt

[root@localhost test]# find . -name '*.txt' -print0 | xargs -d '\0' echo

./1.txt ./2.txt ./3.txt ./4.txt ./test.txt

# xargs中的-0和-d '\0'表示從標準輸入讀取內容以'\0'進行分隔,因find的結果中是以'\0'進行分隔,所以xargs使用'\0'將find的結果分隔之後得到5個引數,而且引數中間有空格做為間隔。

6、-i選項

[root@localhost test]# find ./ -name '*.txt' | xargs -i cp {} /tmp/temp/

[root@localhost test]# ll /tmp/temp/

總用量 20

-rw-r--r-- 1 root root 6 8月 12 00:10 1.txt

-rw-r--r-- 1 root root 6 8月 12 00:10 2.txt

-rw-r--r-- 1 root root 6 8月 12 00:10 3.txt

-rw-r--r-- 1 root root 6 8月 12 00:10 4.txt

-rw-r--r-- 1 root root 19 8月 12 00:10 test.txt

7、-i選項

[root@localhost test]# find ./ -name '*.txt' | xargs -i {} -i cp {} /tmp/temp/

[root@localhost test]# ll /tmp/temp/

總用量 20

-rw-r--r-- 1 root root 6 8月 12 00:14 1.txt

-rw-r--r-- 1 root root 6 8月 12 00:14 2.txt

-rw-r--r-- 1 root root 6 8月 12 00:14 3.txt

-rw-r--r-- 1 root root 6 8月 12 00:14 4.txt

-rw-r--r-- 1 root root 19 8月 12 00:14 test.txt

-i和-i選項的區別如下所示:

Linux基礎教程

主編 張同光 isbn 9787302183600 定價 34元 印刷日期 2008 10 13 出版社 清華大學出版社 圖書簡介 本書以redhat公司的linux最新版本redhat enterprise linux 5.2為藍本,堅持 理論夠用 側重實用 的原則,用案例 來講解每個知識點,對l...

linux基礎教程

使用者和組操作 linux 作業系統之所以穩定 安全,與它的 使用者和組 的管理是分不開的,我先來看下,現實生活中專案組中的簡單管理 給使用者設定操作檔案許可權的工作非常繁瑣,不要落實。linux 建立使用者的時候,會考慮給使用者建立乙個組別 系統增減檔案的時候,也會把乙個檔案劃分為乙個組別裡邊 這...

Linux基礎教程

自海燕部落格 目錄005 shell第一篇 bash 環境 006 shell第二篇 正規表示式和文字處理工具 007 shell第三篇 基本語法 十天快速入門python python從入門到web框架 python爬蟲從入門到框架 python之23種計模式實現 史上最全最通俗易懂 內容整改中 ...