Linux命令(1)——xargs命令
Linux命令(1)——xargs命令
轉載:https://blog.csdn.net/K346K346/article/details/54233870
1.功能:
xargs可以將stdin中以空格或換行符進行分隔的資料,形成以空格分隔的引數(arguments),傳遞給其他命令。因為以空格作為分隔符,所以有一些檔名或者其他意義的名詞內含有空格的時候,xargs可能會誤判。簡單來說,xargs是給其他命令傳遞引數的一個過濾器,是構建單行命令的重要元件之一。
之所以要用到xargs,是因為由於很多命令不支援使用管道|來傳遞引數,例如:
find /sbin -perm +700 |ls -l //這個命令是錯誤,因為標準輸入不能作為ls的引數
find /sbin -perm +700 |xargs ls -l //這樣才是正確的
2.命令格式
xargs [選項] [command]
3.選項說明:
-0:如果輸入的stdin含有特殊字元,例如反引號`、反斜槓\、空格等字元時,xargs可以將它還原成一般字元。為xargs的預設選項。
-e <flag>,-E <flag>,--eof=<eof-str>:eof是end of file string的意思。flag可以是一個字串或者是由空格分隔的多個字串,當xargs分析到這個flag時,就會停止工作。見示例2。
-p:當每次執行一個argument的時候詢問一次使用者。
-n <num>:表示命令在執行的時候一次使用的argument的個數,由num指定,預設是用所有的引數。
-t:表示先列印命令,然後再執行。
-a <file>:從檔案中讀入作為sdtin。
-i[replace-str]:告訴xargs可以使用{}代替從標準輸入讀取的引數,可以指定替代字串replace-str,如果沒有指定,預設為{}。建議使用-I,其符合POSIX標準。
-I [replace-str]:將xargs的輸出每一項引數,單獨賦值給後面的命令,引數需要用指定的代替字串replace-str代替,也就是說replace-str不可預設,必須顯示指明,可以使用{} $ @等符號,其主要作用是當xargs command後有多個引數時,調整引數位置。例如:find . -name "*.txt"|xargs -I {} cp {} /tmp/{}.bak。
-r:或者--no-run-if-empty,當xargs的輸入為空的時候則停止xargs,不用再去執行後面的命令了,-r是xargs的預設選項。
-s <num>:命令列的最大字元數,指的是xargs後面那個命令的最大命令列字元數,包括命令、空格和換行符。每個引數單獨傳入xargs後面的命令。見示例4。
-L <line_num>:設定標準輸入中最大的行數作為命令每一次執行的引數。見示例5。
-d <delim>, --delimiter=<delim>: xargs處理標準輸入預設是按換行符和空格作為分隔符,輸出arguments的分隔符是空格,這裡修改xargs處理標準輸入時的分隔符。
-x:eXit的意思,主要是配合-s使用,當命令列字元數大於-s指定的數值時,退出xargs。
-P:修改最大的程式數,預設是1,為0時候為as many as it can。該選項比較少用,目前還不清楚該用法。
4.用法示例
(1)將shell的特殊字元還原為一般字元。
[b3335@MIC ~]$ echo '`0123`4 56789'|xargs -t echo
echo `0123`4 56789
`0123`4 56789
如果直接進行如下操作,會報無法找到命令01234的錯誤,因為反引號在shell中會將01234作為一個命令來執行,但是01234不是一個命令。-t表示先列印命令,然後再執行。
[b3335@MIC ~]$ echo `01234` 56789
-bash: 01234: command not found
56789
(2)設定xargs讀入引數時的結束標識,以逗號結束。這裡要注意結束標誌必須要是單獨的欄位,即以空格或者換行符分隔的欄位。
[b3335@MIC ~]$ echo 01234 , 56789|xargs -E ","
01234
(3)使用rm、mv等命令同時操作多個檔案時,有時會報”argument list too long”引數列表過長的錯誤,此時可以使用xargs來解決。xargs將標準輸入的字串分隔後,單獨作為引數傳遞給後面的命令。例如,將當前目錄的所有檔案新增字尾名。
xargs -t -i mv {} {}.bak
#選擇符合條件的檔案
ls|grep -E "201701|201702|201703|201704|201705|201706|201707|201708|201709|201710" |xargs -i mv {} {}.bak
(4)設定命令列的最大字元數。引數預設一個一個單獨傳入命令中執行。
[b3335@MIC test]$ echo "01234 56789"|xargs -t -s 11
echo 01234
01234
echo 56789
56789
(5)設定標準輸入中每次多少行作為命令的引數,預設是將標準輸入中所有行的歸併到一行一次性傳給命令執行。
[b3335@MIC test]$ echo -e "01234\n56789\n01234" | xargs -t -L 2 echo
echo 01234 56789
01234 56789
echo 01234
01234
(6)將檔案內容以空格分隔同行輸出。
//列出檔案內容
cat test.txt
a b c d e
f g h i j
k l m n o
//多行輸入單行輸出:
cat test.txt | xargs
a b c d e f g h i j k l m n o
(7)與ps、grep、awk和kill結合,強制終止指定程式
ps -ef|grep spp|awk '{printf "%s ",$2}'|xargs kill -9
命令解釋: ps -ef|grep spp
用於查詢包含spp的程式,awk '{printf "%s ",$2,FNR}
將目標程式ID列印輸出,xargs kill -9
則將目標程式ID作為引數傳遞給kill -9
用於殺死程式。
相關文章
- 每天一個Linux命令(1):xargsLinux
- Linux xargs 命令詳解Linux
- Linux xargs命令介紹Linux
- linux 命令值xargs與trLinux
- linux中xargs命令的使用方式Linux
- Linux 引數代換 命令 xargsLinux
- xargs 命令教程
- linux系統中xargs命令的使用方式Linux
- xargs 命令詳解,xargs 與管道的區別
- 每天一個linux命令(1):find命令之execLinux
- 【Linux命令】grep命令Linux
- Linux命令—–CP命令Linux
- Linux彙總基本命令【1】Linux
- Linux命令之lldptool命令Linux
- Linux命令篇 - sed 命令Linux
- Linux命令篇 - grep 命令Linux
- Linux命令篇 - tar 命令Linux
- Linux命令之rz命令與sz命令Linux
- shell程式設計必須要掌握的命令-xargs程式設計
- linux命令大全-linux命令使用和管理Linux
- Linux(1) linux入門以及常用命令Linux
- linux學習day1——linux常見命令Linux
- Linux命令Linux
- linux每日命令(5):mkdir命令Linux
- linux-mysql命令,tomcat命令LinuxMySqlTomcat
- linux每日命令(2):cd命令Linux
- linux每日命令(18):whereis命令Linux
- linux每日命令(12):nl命令Linux
- linux每日命令(10):touch命令Linux
- linux每日命令(11):cat命令Linux
- linux每日命令(38):iostat命令LinuxiOS
- linux每日命令(39):lsof命令Linux
- linux每日命令(32):gzip命令Linux
- linux每日命令(35):grep命令Linux
- linux每日命令(36):wc命令Linux
- linux每日命令(37):top命令Linux
- linux每日命令(29):chown命令Linux
- Linux命令總結--mkdir命令Linux