Linux shell基礎知識_8(下)

zhengyshan發表於2018-06-03

shell特殊符_10

特殊符號

  • *任意個任意字元

  • ?任意一個字元

  • #註釋字元,#後面的命令不生效

  • \脫義字元,取消特殊字元的原意

[root@zyshanlinux-01 ~]# a=1
[root@zyshanlinux-01 ~]# b=2
[root@zyshanlinux-01 ~]# c='$a$b'
[root@zyshanlinux-01 ~]# echo $c
$a$b
[root@zyshanlinux-01 ~]# c=\$a\$b  ##脫義
[root@zyshanlinux-01 ~]# echo $c
$a$b


  • |管道符

幾個和管道有關的命令,這些命令並沒有更改檔案的內容。

1、cut分割

cut命令用來顯示行中的指定部分,刪除檔案中指定欄位。cut經常用來顯示檔案的內容,類似於下的type命令。

說明:該命令有兩項功能,其一是用來顯示檔案的內容,它依次讀取由引數file所指 明的檔案,將它們的內容輸出到標準輸出上;其二是連線兩個或多個檔案,如cut fl f2 > f3將把檔案fl和幾的內容合併起來,然後通過輸出重定向符“>”的作用,將它們放入檔案f3中。

當檔案較大時,文字在螢幕上迅速閃過(滾屏),使用者往往看不清所顯示的內容。因此,一般用more等命令分屏顯示。為了控制滾屏,可以按Ctrl+S鍵,停止滾屏;按Ctrl+Q鍵可以恢復滾屏。按Ctrl+C(中斷)鍵可以終止該命令的執行,並且返回Shell提示符狀態。

語法

cut (選項) (引數)

選項

-d:指定欄位的分隔符,預設的欄位分隔符為“TAB”;-f:顯示指定欄位的內容;-c:僅顯示行中指定範圍的字元;

引數

檔案:指定要進行內容過濾的檔案。

示例

[root@zyshanlinux-01 ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1
root
bin
[root@zyshanlinux-01 ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1,2
root:x
bin:x
[root@zyshanlinux-01 ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1-3
root:x:0
bin:x:1
[root@zyshanlinux-01 ~]# cat /etc/passwd |head -2 |cut -c 4
t
:

2、sort排序

sort命令是在Linux裡非常有用,它將檔案進行排序,並將排序結果標準輸出。sort命令既可以從特定的檔案,也可以從stdin中獲取輸入。

ASCII碼排序

ASCII(American Standard Code for Information Interchange,美國資訊交換標準程式碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,並等同於國際標準ISO/IEC 646。 [1] 請注意,ASCII是American Standard Code for Information Interchange縮寫,而不是ASCⅡ(羅馬數字2),有很多人在這個地方產生誤解。

語法

sort (選項) (引數)

選項

-n:依照數值的大小排序;

-r:以相反的順序來排序;

-t<分隔字元>:指定排序時所用的欄位分隔字元; -kn1/-kn1,2

引數

檔案:指定待排的檔案列表。

示例

[root@zyshanlinux-01 ~]# sort /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin


3、wc計算數字

wc命令用來計算數字。利用wc指令我們可以計算檔案的Byte數、字數或是列數,若不指定檔名稱,或是所給予的檔名為“-”,則wc指令會從標準輸入裝置讀取資料。

語法

wc (選項) (引數)

選項

-l或——lines:只顯示行數;-m: 統計字元數;-w或——words:只顯示字數;-c或--bytes或——chars:只顯示Bytes數;

引數

檔案:需要統計的檔案列表。

示例

[root@zyshanlinux-01 ~]# wc -l 1.txt10 1.txt

[root@zyshanlinux-01 ~]# wc -m 2.txt8 2.txt[root@zyshanlinux-01 ~]# cat -A 2.txtawk$wwc$[root@zyshanlinux-01 ~]# wc -w 2.txt2 2.txt

4、uniq去重

uniq命令用於報告或忽略檔案中的重複行,一般與sort命令結合使用。

語法

uniq (選項) (引數)

選項

-c或——count:在每列旁邊顯示該行重複出現的次數;

引數

輸入檔案:指定要去除的重複行檔案。如果不指定此項,則從標準讀取資料;輸出檔案:指定要去除重複行後的內容要寫入的輸出檔案。如果不指定此選項,則將內容顯示到標準輸出裝置(顯示終端)。

示例

[root@zyshanlinux-01 ~]# sort 2.txt |uniq   ##先排序,再去重複,否則去重複失敗

123
awk
c
ww


5、tee和>類似,重定向的同時還在螢幕顯示

tee命令用於將資料重定向到檔案,另一方面還可以提供一份重定向資料的副本作為後續命令的stdin。簡單的說就是把資料重定向到給定檔案和螢幕上。

語法

tee (選項) (引數)

選項

-a:向檔案中重定向時使用追加模式;-i:忽略中斷(interrupt)訊號。

引數

檔案:指定輸出重定向的檔案。

示例

[root@zyshanlinux-01 ~]# sort 2.txt |uniq -c > a.txt
[root@zyshanlinux-01 ~]# cat a.txt
      1 
      2 123
      1 awk
      1 c
      2 ww
[root@zyshanlinux-01 ~]# > a.txt  ##清空a.txt的內容
[root@zyshanlinux-01 ~]# cat a.txt
[root@zyshanlinux-01 ~]# sort 2.txt |uniq -c |tee a.txt
      1 
      2 123
      1 awk
      1 c
      2 ww
[root@zyshanlinux-01 ~]# cat a.txt
      1 
      2 123
      1 awk
      1 c
      2 ww
[root@zyshanlinux-01 ~]# sort 2.txt |uniq -c |tee -a a.txt  ##與>>追加類似
      1 
      2 123
      1 awk
      1 c
      2 ww
[root@zyshanlinux-01 ~]# cat a.txt
      1 
      2 123
      1 awk
      1 c
      2 ww
      1 
      2 123
      1 awk
      1 c
      2 ww


6、tr替換字元,tr'a''b',大小寫替換tr'[a-z]''[A-Z]'

tr命令可以對來自標準輸入的字元進行替換、壓縮和刪除。它可以將一組字元變成另一組字元,經常用來編寫優美的單行命令,作用很強大。

語法

tr (選項) (引數)

選項

-c或——complerment:取代所有不屬於第一字符集的字元;-d或——delete:刪除所有屬於第一字符集的字元;-s或--squeeze-repeats:把連續重複的字元以單獨一個字元表示;-t或--truncate-set1:先刪除第一字符集較第二字符集多出的字元。

引數

字符集1:指定要轉換或刪除的原字符集。當執行轉換操作時,必須使用引數“字符集2”指定轉換的目標字符集。但執行刪除操作時,不需要引數“字符集2”;字符集2:指定要轉換成的目標字符集。

示例

[root@zyshanlinux-01 ~]# echo "zyshanlinux" |tr '[al]' '[AL]'
zyshAnLinux
[root@zyshanlinux-01 ~]# echo "zyshanlinux" |tr '[zl]' '[ZL]'
ZyshanLinux
[root@zyshanlinux-01 ~]# echo "zyshanlinux" |tr 'z' 'Z'
Zyshanlinux


7、split切割,-b大小(預設單位位元組),-l行數

split命令可以將一個大檔案分割成很多個小檔案,有時需要將檔案分割成更小的片段,比如為提高可讀性,生成日誌等。

選項

-b:值為每一輸出檔案的大小,單位為 byte。-C:每一輸出檔中,單行的最大 byte 數。-d:使用數字作為字尾。-l:值為每一輸出檔的列數大小。

示例

[root@zyshanlinux-01 ~]# split -b 100M bigfile
[root@zyshanlinux-01 ~]# split -l 1000 bigfile


  • $變數字首,!$組合,正則裡面表示行尾

  • ;多條命令寫到一行,用分號分割

  • ~使用者家目錄,後面正規表示式表示匹配符

  • &放到命令後面,會把命令丟到後臺

  • > >> 2> 2>> &>

  • []指定字元中的要給,[0-9],[z-zA-Z],[abc]

  • ||和&& ,用於命令之間,||類似或,&&類似與

[root@zyshanlinux-01 ~]# ls 1.txt ||wc -l 1.txt  ##前一條命令成功,不執行後一條命令
1.txt
[root@zyshanlinux-01 ~]# ls 1a.txt ||wc -l 1.txt  ##前一條命令失敗,執行後一條命令
ls: 無法訪問1a.txt: 沒有那個檔案或目錄
10 1.txt
[root@zyshanlinux-01 ~]# ls 1.txt &&wc -l 1.txt  ##前一條命令成功,執行後一條命令
1.txt
10 1.txt
[root@zyshanlinux-01 ~]# ls 1a.txt &&wc -l 1.txt  ##前一條命令失敗,不執行後條命令
ls: 無法訪問1a.txt: 沒有那個檔案或目錄


相關測驗題目(必須要做):http://ask.apelearn.com/question/5437

簡易審計系統(必須要預習): http://www.68idc.cn/help/server/linux/2014042190951.html

擴充套件:

關於PROMPT_COMMAND環境變數的含義 http://www.linuxnote.org/prompt_command-environment-variables.html

source exec 區別 http://alsww.blog.51cto.com/2001924/1113112

Linux特殊符號大全http://ask.apelearn.com/question/7720

sort並未按ASCII排序 http://blog.csdn.net/zenghui08/article/details/7938975