shell學習筆記(三)

2021-09-19 15:08:30 字數 3608 閱讀 1547

雙向重導向

teetee -a file能將資料流分別輸出到檔案和螢幕中,到螢幕中的資料輸出(stdout)就可以讓下乙個命令繼續處理。

例:last | tee last -a last.list | cut -d 』 』 -f 1

字元轉換命令:tr、col、join、paste、expand

trtr [-ds] 字串

-d 刪除

-s 取代重複的字元

例:last | tr -s [a-z] [a-z]將輸出內容小寫變成大寫。

cat /etc/passwd | tr -d ':'將輸出內容裡面的:都刪掉。

colcol [-x]將輸出內容裡面的tab轉換成空白鍵

join

join [-ti12] file1 file2對比2個檔案(必須經過經過相同規則進行過排序),找出同一位置有相同的部分進行合併為乙個,剩餘部分在後面追加。

-t join預設以空字元分割剩餘資料,-t可以指定分割的字元,例如使用:分割2段資料。

-i 忽略大小寫

-1 數字1,代表第乙個檔案以那一段的資料進行對比

-2 代表第二個檔案以那一段的資料進行對比

例:a檔案為學生姓名、學號

cat a

zhangsan 05

lisi 11

wangwu 21

b檔案為學生姓名、成績

cat b                   

zhangsan 78

lisi 82

wangwu 59

現在需要將學生的姓名、學號、對應的成績合併乙個檔案裡面。

join a b

zhangsan 05 78

lisi 11 82

wangwu 21 59

paste

paste -d file1 file2直接將2個檔案內容以行進行連線,並以tab隔開。

-d 後面接分隔字元,預設是tab

- file部分寫成- ,表示是來自stdin的資料

expand

expand -t file用於將tab轉變成空格字元,-t後面接數字,一般乙個tab為8個空格。

split

split [-bl] file用於將乙個檔案以大小或行數來切割成幾個檔案。

-b 後面為切割的檔案大小,可加單位,b、k、m

-l 以行數進行切割

例:split -b 1000 a.txt ./learn_shell/a ;cd ~/learn_shell/;ll

xargs

xargs [-dpne0] command命令可以通過管道接受字串,並將接收到的字串通過空格分割成許多引數(預設情況下是通過空格分割) 然後將引數傳遞給其後面的命令,作為後面命令的命令列引數

例一:echo 『–help』 | cat

--help                          <==輸出
例二:

echo 『–help』 | xargs cat

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

concatenate file(s) to standard output.

如果沒有指定檔案,或者檔案為"-",則從標準輸入讀取。

-a, --show-all equivalent to -vet

-b, --number-nonblank number nonempty output lines, overrides -n

-e equivalent to -ve

-e, --show-ends display $ at end of each line

-n, --number number all output lines

-s, --squeeze-blank suppress repeated empty output lines

-t 與-vt 等價

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

......

第乙個例子中cat接受的是管道中過來的標準輸出,然後將其顯示出螢幕中。例二中xargs可以將管道傳過來的–help轉為cat的引數,所有輸出的是cat --help。

xargs的選項:

-d xargs預設是以空格分割引數,-d可以指定分割引數的特殊符合。

例:echo 『11@22@33』 | xargs -d 『@』 echo指定@為分割引數符號

11

2233

-p 可以在執行command前,會顯示要執行的命令,並詢問是否需要執行命令。

例:echo 『11』 | xargs -p kill

kill 11 ?...
-n 這個選項會根據-n後面的數字來決定要執行的命令每次接受多少個引數來執行。

例:echo 『11 22 33』 | xargs -n 2 echoecho命令會每次接受2個引數。

11 22

33

-e 當xargs解釋到多個引數時,當執行到-e後面的引數時就會停止。

echo 『11 22 33』 | xargs -e 『33』 echo,命令執行到33時就會停止。

11

22

-0 等於-d 『\0』,就是輸出內容不換行。

實際中有很多命令不支援管道命令的stdin,如ls、rm、kill等,xargs就可以將接收到的stdin作為這些命令的引數來執行命令。比如我在學習中在家目錄下建了很多類似123.txt的檔案,我想把他們刪掉可以這樣:

find ~/ -name 123.txt | xargs -p rm
減號-的用途

在管道命令中,管道前命令產生的stdout可以作為管道後面命令的stdin,而-可以代替這個stdin。

例:有乙個123.txt的檔案,內容是abc。

echo 『123』 | cat 123.txt

abc

雖然echo 『123』 產生出stdout,但cat 的引數是123.txt所有輸出的是abc。

echo 『123』 | cat 123.txt -

abc123

-就是cat的stdin,所有管道前的stdout也一併輸出。

Linux學習筆記 三 理解shell

在終端 器中 輸入等效的bash命令時會建立乙個新的 子shell bash shell 在執行的時候就是乙個程序 ps forest 命令 可以列出 shell 巢狀結構 可以在一行中依次執行一系列命令,只要在命令中間加上 分號 命令列表想要成為程序列表 要將命令包含在 括號中 另一種命令分組語法...

Shell 指令碼學習筆記三 Shell字串

your name li lei 雙引號字串 str this is a string 單引號字串 拼接字串 your name qinjx greeting hello,your name greeting 1 hello,echo greeting greeting 1 獲取字串長度 strin...

shell 學習筆記

shell 是解釋型語言 移植性強課對應不同的直譯器 bin sh f 變數開頭以乙個字母或者下劃線,後接任意長度的字母 數字或者下劃線。命令 commod op 引數 輸入 輸出 重定向管道 echo printf 大口如小口出。特殊檔案 dev null bit bucket 刪除所有輸入的資料...