文本主要是記錄在學習實驗樓中的Linux基本入門課程時,所做的學習筆記。
如有著作權問題請聯絡:874870841@qq.com
掌握基本命令:sed ,grep ,awk的用法
掌握Regex符號和文法
文法
| 字元 |
描述 |
| \ |
將下一個字元標記為一個特殊字元、或一個原義字元。例如,“n”匹配字元“n”。“\n”匹配一個分行符號。序列“\”匹配“\”而“(”則匹配“(”。 |
| ^ |
匹配輸入字串的開始位置。 |
| $ |
匹配輸入字串的結束位置。 |
| {n} |
n是一個非負整數。匹配確定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的兩個o。 |
| {n,} |
n是一個非負整數。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等價於“o+”。“o{0,}”則等價於“o*”。 |
| {n,m} |
m和n均為非負整數,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”將匹配“fooooood”中的前三個o。“o{0,1}”等價於“o?”。請注意在逗號和兩個數之間不能有空格。 |
| * |
匹配前面的子運算式零次或多次。例如,zo*能匹配“z”、“zo”以及“zoo”。*等價於{0,}。 |
| + |
匹配前面的子運算式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等價於{1,}。 |
| ? |
匹配前面的子運算式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等價於{0,1}。 |
| ? |
當該字元緊跟在任何一個其他限制符(*,+,?,{n},{n,},{n,m})後面時,匹配模式是非貪婪的。非貪婪模式儘可能少的匹配所搜尋的字串,而預設的貪婪模式則儘可能多的匹配所搜尋的字串。例如,對於字串“oooo”,“o+?”將匹配單個“o”,而“o+”將匹配所有“o”。 |
| . |
匹配除“\n”之外的任何單個字元。要匹配包括“\n”在內的任何字元,請使用像“(.|\n)”的模式。 |
| (pattern) |
匹配pattern並擷取這一匹配的子字串。該子字串用於反向參考。要匹配圓括弧字元,請使用“(”或“)”。 |
| x|y |
匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”則匹配“zood”或“food”。 |
| [xyz] |
字元集合(character class)。匹配所包含的任意一個字元。例如,“[abc]”可以匹配“plain”中的“a”。其中特殊字元僅有反斜線\保持特殊含義,用於逸出字元。其它特殊字元如星號、加號、各種括弧等均作為一般字元。脫字元^如果出現在首位則表示負值字元集合;如果出現在字串中間就僅作為一般字元。連字號 - 如果出現在字串中間表示字元範圍描述;如果如果出現在首位則僅作為一般字元。 |
| [^xyz] |
排除型(negate)字元集合。匹配未列出的任一字元。例如,“[^abc]”可以匹配“plain”中的“plin”。 |
| [a-z] |
字元範圍。匹配指定範圍內的任一字元。例如,“[a-z]”可以匹配“a”到“z”範圍內的任意小寫字母字元。 |
| [^a-z] |
排除型的字元範圍。匹配任何不在指定範圍內的任一字元。例如,“[^a-z]”可以匹配任何不在“a”到“z”範圍內的任一字元。 |
優先順序
優先順序為從上到下從左至右,依次降低:
| 運算子 |
說明 |
| \ |
轉義符 |
| (), (?:), (?=), [] |
括弧和中括弧 |
| *、+、?、{n}、{n,}、{n,m} |
限定符 |
| ^、$、\任何元字元 |
錨點和序列 |
| | |
選擇 |
grep模式比對命令
grep命令用於列印輸出文本中匹配的模式串,它使用Regex作為模式比對的條件。grep支援三種Regex引擎,分別用三個參數指定:
| 參數 |
說明 |
| -E |
POSIX擴充Regex,ERE |
| -G |
POSIX基本Regex,BRE |
| -P |
PerlRegex,PCRE |
在通過grep命令使用Regex之前,先介紹一下它的常用參數:
| 參數 |
說明 |
| -b |
將二進位檔案作為文本來進行匹配 |
| -c |
統計以模式比對的數目 |
| -i |
忽略大小寫 |
| -n |
顯示匹配文本所在行的行號 |
| -v |
反選,輸出不匹配行的內容 |
| -r |
遞迴匹配尋找 |
| -A n |
n為正整數,表示after的意思,除了列出匹配行之外,還列出後面的n行 |
| -B n |
n為正整數,表示before的意思,除了列出匹配行之外,還列出前面的n行 |
| –color=auto |
將輸出中的匹配項設定為自動顏色顯示 |
下麵包含完整的特殊符號及說明:
| 特殊符號 |
說明 |
| [:alnum:] |
代表英文大小寫位元組及數字,亦即 0-9, A-Z, a-z |
| [:alpha:] |
代表任何英文大小寫位元組,亦即 A-Z, a-z |
| [:blank:] |
代表空白鍵與 [Tab] 按鍵兩者 |
| [:cntrl:] |
代表鍵盤上面的控制按鍵,亦即包括 CR, LF, Tab, Del.. 等等 |
| [:digit:] |
代表數字而已,亦即 0-9 |
| [:graph:] |
除了空白位元組 (空白鍵與 [Tab] 按鍵) 外的其他所有按鍵 |
| [:lower:] |
代表小寫位元組,亦即 a-z |
| [:print:] |
代表任何可以被列印出來的位元組 |
| [:punct:] |
代表標點符號 (punctuation symbol),亦即:” ’ ? ! ; : # $… |
| [:upper:] |
代表大寫位元組,亦即 A-Z |
| [:space:] |
任何會產生空白的位元組,包括空白鍵, [Tab], CR 等等 |
| [:xdigit:] |
代表 16 進位的數字類型,因此包括: 0-9, A-F, a-f 的數字與位元組 |
注意:之所以要使用特殊符號,是因為上面的[a-z]不是在所有情況下都管用,這還與主機當前的語系有關,即設定在LANG環境變數的值,zh_CN.UTF-8的話[a-z],即為所有小寫字母,其它語系可能是大小寫交替的如,”a A b B…z Z”,[a-z]中就可能包含大寫字母。所以在使用[a-z]時請確保當前語系的影響,使用[:lower:]則不會有這個問題。
sed 留編輯器
sed -i '1s/sad/happy/' test # 表示將test檔案中第一行的"sad"替換為"happy"
| 參數 |
說明 |
| -n |
安靜模式,只列印受影響的行,預設列印輸入資料的全部內容 |
| -e |
用於在指令碼中添加多個執行命令一次執行,在命令列中執行多個命令通常不需要加該參數 |
| -f |
filename 指定執行filename檔案中的命令 |
| -r |
使用擴充Regex,預設為標準Regex |
| -i |
將直接修改輸入檔案內容,而不是列印到標準輸出裝置 |
sed執行命令格式:
[n1][,n2]command[n1][~step]command
其中一些命令可以在後面加上作用範圍,形如:
$ sed -i 's/sad/happy/g' test # g表示全域範圍
$ sed -i 's/sad/happy/4' test # 4表示指定行中的第四個匹配字串
其中n1,n2表示輸入內容的行號,它們之間為,逗號則表示從n1到n2行,如果為~波浪號則表示從n1開始以step為步進的所有行;command為執行動作,下面為一些常用動作指令:
| 命令 |
說明 |
| s |
行內替換 |
| c |
整行替換 |
| a |
插入到指定行的後面 |
| i |
插入到指定行的前面 |
| p |
列印指定行,通常與-n參數配合使用 |
| d |
刪除指定行 |
sed簡明教程
sed完全手冊
awk文本處理語言
雖然很強大,感覺暫時用不到,先付個常用的內建變數表吧
| 變數名 |
說明 |
| FILENAME |
當前輸入檔案名稱,若有多個檔案,則只表示第一個。如果輸入是來自標準輸入,則為空白字串 |
| $0 |
目前記錄的內容 |
| $N |
N表示欄位號,最大值為NF變數的值 |
| FS |
欄位分隔符號,由Regex表示,預設為” “空格 |
| RS |
輸入記錄分隔字元,預設為”\n”,即一行為一個記錄 |
| NF |
目前記錄欄位數 |
| NR |
已經讀入的記錄數 |
| FNR |
當前輸入檔案的記錄數,請注意它與NR的區別 |
| OFS |
輸出欄位分隔符號,預設為” “空格 |
| ORS |
輸出記錄分隔字元,預設為”\n” |
awk入門指南
awk簡明教程
user guide
Vim 大冒險