首頁 > 易卦

原來,Linux的管道命令還有這種寫法

作者:由 Zoe的01世界 發表于 易卦日期:2023-01-25

linux如何建立管道檔案

說起Linux的管道命令,肯定Linuxer們會說,簡單,不就|和><三個符號嗎?

其中|表示將上一個命令的輸出傳遞到下一個命令。

>表示將命令結果輸入到檔案,<表示將檔案內容提取作為命令的輸入引數。

原來,Linux的管道命令還有這種寫法

這時,一位隱於角落的老者喃喃道,不不,“你知道茴香豆的回字一共是有四種寫法的”(魯迅《孔乙己》,現在已經從中學教材中刪除)。

Linux的文化就是將眾多晦澀難懂的小工具組合起來,從而產生連原作者都無法想象的威力,而這些小工具往往2個字母,無數個命令引數,學習曲線頗為陡峭。而這組合的方式就是利用管道,所以在Linux的規範中,小工具們產生的格式一定是純文字,這樣後面的工具才能正確地解讀。那管道的寫法究竟幾種方式,只是用|把命令們串起來就可以了嗎?

我們使用find和grep兩個命令做一個示範:

find命令按照檔名稱找出需要的檔案。

grep命令從檔案內容中篩選出符合要求的部分。

原來,Linux的管道命令還有這種寫法

第一式,使用find的exec引數。

find 。 -type f -name “cron*” -exec grep -l log {} \;

原來,Linux的管道命令還有這種寫法

exec很強大,有時可以解決你用其他方式時非常彆扭的情況。

第二式,使用xargs大法,這個工具使用得非常多。

find 。 -type f -name “cron*” | xargs grep -l log

原來,Linux的管道命令還有這種寫法

xargs為什麼以x開頭呢,這個命令類似於excel的轉置,將前面的列,變為後面的行。這樣其實就是讓後面的命令根據前面找的檔案逐條執行。

這時,有小夥伴要問了,我有時引數並不在最後一個啊,如果在中間怎麼辦,放心,xargs有-I(大i)引數,可以讓你生成帶變數的命令:

find 。 -type f -name “cron*” | xargs -I % grep log % -li

宣告%作為變數,代表前面命令的結果,然後在grep中使用%變數。

第三式,使用$()來優先求結果。

grep -l log $(find 。 -type f -name “cron*”)

$()將優先計算,隨後結果和grep共同構成最終的命令。但是要注意一個大坑,如果find找不出檔案,grep命令將會無限執行,需要按ctrl+c結束。

好了,大概就講這麼多了,如果大家覺得還有更加奇妙的寫法,歡迎在下方留言。

原創版權,如引用需要註明來源和連結。