Linux xargs引數代換命令
在Linux中並不是所有的命令都可以處理資料流,因此有的時候我們想將普通的命令當作管線命令來使用,那麼久可以使用xargs這個命令了,這個命令主要的用途是將|前的命令輸出的資料流轉換成引數,然後給與後面的命令使用。
下面以id命令來嘗試,id命令可以輸出某個賬號的的uid,gid跟groups,但是這個命令每次只能處理1個賬號,那麼現在需求是1次性輸出/etc/passwd檔案下的前3個賬號的資訊
xargs的使用,引數與選項
[[email protected] ~]$ xargs [-0epn] command
選項與引數:
-0 :如果輸入的 stdin 含有特殊字元,例如 `, , 空格鍵等等字元時,這個 -0 引數
可以將他還原成一般字元。這個引數可以用於特殊狀態喔!
-e :這個是 EOF (end of file) 的意思。後面可以接一個字串,當 xargs 分析到這個字串時,
就會停止繼續工作!
-p :在執行每個指令的 argument 時,都會詢問使用者的意思;
-n :後面接次數,每次 command 指令執行時,要使用幾個引數的意思。
當 xargs 後面沒有接任何的指令時,預設是以 echo 來進行輸出喔!
首先我們先用head命令獲取下/etc/passwd的前三個賬號
[root@malt ~]# head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
分別有root,bin,daemon三個賬號,然後我們現在只需要獲取到root,bin跟daemon這三個字串即可,然後那我們就需要用到管線命令cut了
[root@malt ~]# head -n 3 /etc/passwd | cut -d ':' -f 1
root
bin
daemon
如此就可以獲取到3個賬號名字了,然後再通過xargs來將這3個賬號作為引數1次1個來傳送到id命令中。
[[email protected] ~]# head -n 3 /etc/passwd | cut -d ':' -f 1 | xargs -n 1 id
uid=0(root) gid=0(root) groups=0(root)
uid=1(bin) gid=1(bin) groups=1(bin)
uid=2(daemon) gid=2(daemon) groups=2(daemon)
這樣就滿足了我們上面的需求了