Linux 使用正则表达式的常用命令
【grep 命令】
1.基本操作
1)作用:grep命令用于打印輸出文本中匹配的模式串,它使用正則表達式作為模式匹配的條件。
2)命令格式:grep [選項] 要匹配的字符串 文件名
3)常見選項:
| -b | 將二進制文件作為文本來進行匹配 |
| -c | 統計以模式匹配的數目 |
| -i | 忽略大小寫 |
| -n | 顯示匹配文本所在行的行號 |
| -v | 反選,輸出不匹配行的內容 |
| -r | 遞歸匹配查找 |
| -A n | 除了列出匹配行之外,還列出后面的 n 行 |
| -B n | 除了列出匹配行之外,還列出前面的 n 行 |
| --color=auto | 將輸出中的匹配項設置為自動顏色顯示 |
4)實例:
2.使用正則表達式
1)正則表達式引擎
grep 支持三種正則表達式引擎,分別用三個參數指定:
| -G | POSIX 基本正則表達式,BRE |
| -E | POSIX 擴展正則表達式,ERE |
| -P | Perl 正則表達式,PCRE |
2)使用基本正則表達式,BRE
grep 默認使用基本正則表達式,或者在使用的時候加上 -G 參數
① 位置
例:
查找 /etc/group 文件中以 "root" 為開頭的行
② 數量
例:
匹配以 'z' 開頭以 'o' 結尾的所有字符串
匹配以 'z' 開頭以 'o' 結尾,中間包含一個任意字符的字符串
匹配以'z'開頭,以任意多個'o'結尾的字符串
注:\n 是換行符
③ 選擇
特殊符號及說明
| [:alnum:] | 代表英文大小寫字母及數字,即:0-9, A-Z, a-z |
| [:alpha:] | 代表英文大小寫字母,即:A-Z, a-z |
| [:digit:] | 代表數字,即:0-9 |
| [:lower:] | 代表小寫字母,即:a-z |
| [:upper:] | 代表大寫字母,即:A-Z |
| [:punct:] | 代表標點符號,即:" ' ? ! ; : # $ 等 |
| [:cntrl:] | 代表鍵盤上面的控制按鍵,包括:CR, LF, Tab, Del 等 |
| [:print:] | 代表任何可以被列印出來的字符 |
| [:blank:] | 代表空白鍵與 [Tab] 按鍵 |
| [:graph:] | 除了空白字節(空白鍵與 [Tab] 鍵)外的其他所有按鍵 |
| [:space:] | 代表任何會產生空白的字符,包括:空白鍵, [Tab], CR 等 |
| [:xdigit:] | 代表 16 進位的數字類型,包括: 0-9, A-F, a-f 的數字與字節 |
例:
匹配所有的小寫字母
匹配所有的數字
匹配所有的數字
匹配所有的小寫字母
匹配所有的大寫字母
匹配所有的字母和數字
匹配所有的字母
3)使用擴展正則表達式,ERE
通過 grep 使用擴展正則表達式需要加上 -E 參數,或使用 egrep
① 數量
例:
只匹配 "zo"
匹配以 "zo" 開頭的所有單詞
②?選擇
例:
匹配 "www.baidu.com" 和 "www.google.com"
匹配不包含 "baidu" 的內容
注:. 符號有特殊含義,所以需要轉義
【sed 流編輯器】
sed 工具是用于過濾和轉換文本的流編輯器,與 vim、emacs、geditdeng等編輯器不同的是,sed 是一個非交互式的編輯器。
本文僅介紹 sed 的基本操作,更多內容參考以下鏈接:sed 簡明教程、sed 單行腳本快速參考、sed完全手冊
1.sed 命令基本格式:sed [選項] [執行命令] [輸入文件]
2.常用參數:
| -n | 安靜模式,只打印受影響的行,默認打印輸入數據的全部內容 |
| -e | 用于腳本添加多個執行命令一次執行,在命令行中執行多個命令不需要加 |
| -f filename | 指定執行 filename 文件中的命令 |
| -r | 使用擴展正則表達式,默認為標準正則表達式 |
| -i | 將直接修改輸入文件內容,而不是打印到標準輸出設備 |
3.執行命令格式:
1)[n1][,n2] command [作用范圍]
2)[n1][~step] command [作用范圍]
n1、n2 表示輸入內容的行號,它們之間為 ,逗號表示從 n1 到 n2 行,~波浪號表示從 n1 開始以 step 為步進的所有行,command 為執行動作。
4.常見執行命令
| s | 行內替換 |
| c | 整行替換 |
| a | 插入到指定行的后面 |
| i | 插入到指定行的前面 |
| p | 打印指定行,通常與 -n 參數配合使用 |
| d | 刪除指定行 |
5.實例
1)找一個操作用的文件
2)打印 2-5 行
3)打印奇數行
4)將輸入文本中 "root" 全局替換為 "test",并只打印替換的那一行
5)行間替換
找出 root 的那一行并計算行號
將 root 替換為 www.root.com
【awk 文本處理語言】
1.概述
AWK 是一種優良的文本處理工具,是 Linux 中現有的功能最強大的數據處理引擎之一,其使用的 AWK 程序設計語言,又叫樣式掃描和處理語言。它允許創建簡短的程序,通過程序讀取輸入文件、為數據排序、處理數據、對輸入執行計算以及生成報表等等。簡單地說,AWK 是一種用于處理文本的編程語言工具。
awk 所有的操作都是基于 pattern(模式)—action(動作) 對 來完成的,其形式為:pattern {action}
如同很多編程語言一樣,它將所有的動作操作用一對 {} 花括號包圍起來,其中 pattern 通常是表示用于匹配輸入的文本的“關系式”或“正則表達式”,action 則是表示匹配后將執行的動作。
在一個完整 awk 操作中,模式與動作可以只有其中一個。如果沒有 pattern,則默認匹配輸入的全部文本;如果沒有 action,則默認為打印匹配內容到屏幕。
awk 處理文本的方式,是將文本分割成一些“字段”,然后再對這些字段進行處理,默認情況下,awk 以空格作為一個字段的分割符,也可以任意指定分隔符。
本文僅介紹 awk?的基本操作,更多內容參考以下鏈接:awk 程序設計語言、awk 簡明教程、awk 用戶指南
?
2.awk 命令基本格式:awk [-F fs] [-v var=value] [-f prog-file | 'program text'] [file...]
-F 參數用于預先指定字段分隔符,-v 參數用于預先為 awk 程序指定變量,-f 參數用于指定 awk 命令要執行的程序文件,或者在不加 -f 參數的情況下直接將程序語句放在這里,最后為 awk 需要處理的文本輸入,且可以同時輸入多個文本文件。
3.awk 常用內置變量
| FILENAME | 當前輸入文件名,若有多個文件,則只表示第一個。如果輸入是來自標準輸入,則為空字符串 |
| $0 | 當前記錄的內容 |
| $N | N表示字段號,最大值為NF變量的值 |
| FS | 字段分隔符,由正則表達式表示,默認為" "空格 |
| RS | 輸入記錄分隔符,默認為"\n",即一行為一個記錄 |
| NF | 當前記錄字段數 |
| NR | 已經讀入的記錄數 |
| FNR | 當前輸入文件的記錄數 |
| OFS | 輸出字段分隔符,默認為" "空格 |
| ORS | 輸出記錄分隔符,默認為"\n" |
4.實例
存在一文檔
1)使用 awk 將內容打印到終端
2)將 test 的第一行的每個字段單獨顯示為一行
注:在學習和使用 awk 的時候,應盡可能將其作為一門程序語言來理解,這樣將會使你學習更容易,所以初學階段在練習 awk 時應該盡量按照分多行按照一般程序語言的換行和縮進來輸入,而不是全部寫到一行。
總結
以上是生活随笔為你收集整理的Linux 使用正则表达式的常用命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基础算法 —— 模拟思维
- 下一篇: 信息学奥赛C++语言:行李托运