1. 程式人生 > 其它 >《前端運維》一、Linux基礎--08Shell其他及補充

《前端運維》一、Linux基礎--08Shell其他及補充

這一篇,我們來學習一些重要的命令,在工作中也會經常用到。

一、簡單正則

 要注意的是,有些命令不支援正則模式,比如fs、find等,有些是支援正則的,比如grep、awk、sed等。正則的語法和js中的正則幾乎沒有區別,下面僅簡單羅列下常用的正則:

 

元字元 作用 示例
* 前一個字元匹配 0 次或任意多次 grep 1* reg.txt
. 匹配除換行符外的任意一個字元 grep . reg.txt
^ 匹配行首。例如,^hello 會匹配以 hello 開頭的行 grep ^a reg.txt
$ 匹配行尾。例如,hello& 會匹配以 hello 結尾的行 grep a$ reg.txt
[] 匹配中括號中指定的任意一個字元,而且只匹配一個字元。
例如.[aoeiu]匹配任意一個母音字母, [0-9] 匹配任意一位數字,
[a-z][0-9] 匹配由小寫字母和一位數字構成的兩位字元
grep ab[bc]c reg.txt
[^] 匹配除中括號中的字元以外的任意一個字元。例如,[^0-9] 匹配任意一位非數字字元,
[^a-z] 匹配任意一位非小寫字母
grep a[^fg]c reg.txt
\ 轉義符,用於取消特殊符號的含義 grep \.$ reg.txt
{n} 表示其前面的字元恰好出現 n 次。例如,[0-9]{4} 匹配4位數字,[1][3-8][0-9]{9} 匹配手機號碼 grep "a{1}" reg.txt
(n,} 表示其前面的字元出現不少於 n 次。例如,[0-9]{2,} 匹配兩位及以上的數字 grep "a{1,}" reg.txt
{n,m} 表示其前面的字元至少出現 n 次,最多出現 m 次。例如,[a-z]{6,8} 匹配 6〜8 位的小寫字母 grep "a{2,3}" reg.txt

例子已經寫在表格裡了,大家可以自己去試一下。這裡不多說。

二、cut命令

用來提取文字中的某一部分。

選項有:

  • -b,以位元組為單位進行分割。這些位元組位置將忽略多位元組字元邊界,除非也指定了 -n 標誌。
  • -c,以字元為單位進行分割。
  • -f,與-d一起使用,指定顯示哪個區域。
  • -d,自定義分隔符,預設為製表符。

如果不指定 File 引數,cut 命令將讀取標準輸入。必須指定 -b、-c 或 -f 標誌之一。

cut最常用的就是-d和-f的配合使用:

 或者:

 然後,cut的作用可遠不止如此,還有一些其他的用法。要注意靈活運用。

三、printf命令

printf 由 POSIX 標準所定義,因此使用 printf 的指令碼比使用 echo 移植性好。printf 使用引用文字或空格分隔的引數,外面可以在 printf 中使用格式化字串,還可以制定字串的寬度、左右對齊方式等。預設 printf 不會像 echo 自動新增換行符,我們可以手動新增 \n。

printf的語法是這樣的:

  • printf format-string [arguments...],
    • format-string: 為格式控制字串
    • arguments: 為引數列表。  

我們先來看個例子:

#!/bin/bash

printf "%-10s %-8s %-4s\n" 姓名 性別 體重kg  
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\n" 楊過 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876

結果是:

1、%s %c %d %f 都是格式替代符,%s 輸出一個字串,%d 整型輸出,%c 輸出一個字元,%f 輸出實數,以小數形式輸出。

2、%-10s 指一個寬度為 10 個字元(- 表示左對齊,沒有則表示右對齊),任何字元都會被顯示在 10 個字元寬的字元內,如果不足則自動以空格填充,超過也會將內容全部顯示出來。

3、%-4.2f 指格式化為小數,其中 .2 指保留2位小數。


我們再來看個例子:

#!/bin/bash

# format-string為雙引號
printf "%d %s\n" 1 "abc"

# 單引號與雙引號效果一樣
printf '%d %s\n' 1 "abc"

# 沒有引號也可以輸出
printf %s abcdef

# 格式只指定了一個引數,但多出的引數仍然會按照該格式輸出,format-string 被重用
printf %s abc def

printf "%s\n" abc def

printf "%s %s %s\n" a b c d e f g h i j

# 如果沒有 arguments,那麼 %s 用NULL代替,%d 用 0 代替
printf "%s and %d \n"

結果如下:

 另外,printf的轉義序列如下:

序列 說明
\a 警告字元,通常為ASCII的BEL字元
\b 後退
\c 抑制(不顯示)輸出結果中任何結尾的換行字元(只在%b格式指示符控制下的引數字串中有效),而且,任何留在引數裡的字元、任何接下來的引數以及任何留在格式字串中的字元,都被忽略
\f 換頁(formfeed)
\n 換行
\r 回車(Carriage return)
\t 水平製表符
\v 垂直製表符
\\ 一個字面上的反斜槓字元
\ddd 表示1到3位數八進位制值的字元。僅在格式字串中有效
\0ddd 表示1到3位的八進位制值字元

四、awk命令

AWK 是一種處理文字檔案的語言,是一個強大的文字分析工具。之所以叫 AWK 是因為其取了三位創始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字元。

https://www.runoob.com/linux/linux-comm-awk.html

五、sed命令

sed 命令是利用指令碼來處理文字檔案。sed 可依照指令碼的指令來處理、編輯文字檔案。sed 主要用來自動編輯一個或多個檔案、簡化對檔案的反覆操作、編寫轉換程式等。

https://www.runoob.com/linux/linux-comm-sed.html

六、sort命令

sort命令用於將文字檔案內容加以排序。sort可針對文字檔案的內容,以行為單位來排序。

語法是這樣的:

  • sort [-bcdfimMnr][-o<輸出檔案>][-t<分隔字元>][+<起始欄位>-<結束欄位>][--help][--verison][檔案]

    • -b 忽略每行前面開始出的空格字元。
    • -c 檢查檔案是否已經按照順序排序。
    • -d 排序時,處理英文字母、數字及空格字元外,忽略其他的字元。
    • -f 排序時,將小寫字母視為大寫字母。
    • -i 排序時,除了040至176之間的ASCII字元外,忽略其他的字元。
    • -m 將幾個排序好的檔案進行合併。
    • -M 將前面3個字母依照月份的縮寫進行排序。
    • -n 依照數值的大小排序。
    • -u 意味著是唯一的(unique),輸出的結果是去完重了的。
    • -o<輸出檔案> 將排序後的結果存入指定的檔案。
    • -r 以相反的順序來排序。
    • -t<分隔字元> 指定排序時所用的欄位分隔字元。
    • +<起始欄位>-<結束欄位> 以指定的欄位來排序,範圍由起始欄位到結束欄位的前一欄位。
    • --help 顯示幫助。
    • --version 顯示版本資訊。

七、wc命令

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

語法如下:

  • wc [-clw][--help][--version][檔案...]
    • -c或--bytes或--chars 只顯示Bytes數。
    • -l或--lines 顯示行數。
    • -w或--words 只顯示字。
    • --help 線上幫助。
    • --version 顯示版本資訊。

這個命令比較簡單,大家可以自己嘗試下。