Linux三剑客(grep、sed、awk)(Download)
下面所說的是Linux中最重要的三個命令在業界被稱為“三劍客”,它們是awk,sed,grep。
我們現在知道Linux下一切皆文件,對Linux的操作就是對文件的處理,那么怎么能更好的處理文件呢?這就要用到我們上面的三劍客命令。
在說這三個命令前我們要插入一個小插曲就是“正則表達式”。
一、正則表達式
所謂的正則表達式我個人理解就是正規的表示方法。他是用簡單的方法來實現強大的功能,所以深受計算機愛好者的使用。
三劍客與正則表達式是什么關系呢?
我們可以這樣理解,三劍客就是普通的命令,有的把他們叫做工具,在我看來都一樣。而正則表達式就好比一個模版。三劍客能讀懂這個模版。就這么簡單。注意只有三劍客才能讀懂這個模版哦!
現在他們的關系和功能都搞懂了,接下來我們就來認識下他們怎么結合的。正則表達式是一個模版,這個模版是由一些普通字符和一些元字符組成。普通字符包括大小寫的字母和數字,而元字符則具有特殊的含義。具體如下
|
元字符 |
功能 |
意思 |
|
^ |
匹配行首 |
表示以某個字符開頭 |
|
$ |
匹配行尾 |
表示以某個字符結尾 |
|
^$ |
空行的意思 |
表示空行的意思 |
|
. |
匹配任意單個字符 |
表示任意一個字符 |
|
* |
字符*匹配0或多個此字符 |
表示重復的任意多個字符 |
|
\ |
屏蔽一個元字符的特殊含義 |
表示去掉有意義的元字符的含義 |
|
[] |
匹配中括號內的字符 |
表示過濾括號內的字符 |
|
.* |
代表任意多個字符 |
就是代表任意多個字符 |
|
lele\{n\} |
用來匹配前面lele出現次數。n為次數 |
就是統計前面lele出現的次數 |
|
lele\{n,\} |
含義同上,但次數最少為n |
從功能就可以看出 |
|
lele\{n,m\} |
義同上,但lele出現次數在n與m之間 |
從功能也可以看出 |
|
lele\{n,m\} |
義同上,但lele出現次數在n與m之間 |
從功能也可以看出 |
三劍客的功能非常強大,但我們只需要掌握他們分別擅長的領域即可:grep擅長查找功能,sed擅長取行和替換。awk擅長取列。
二、grep
文本過濾(模式:pattern)工具,grep, egrep
grep [OPTIONS] PATTERN [FILE...]
--color=auto對匹配到的文本著色顯示-v顯示不被pattern匹配到的行-i忽略字符大小寫-n顯示匹配的行號-c統計匹配的行數-o僅顯示匹配到的字符串-q靜默模式,不輸出任何信息-A #after, 后#行-B #before, 前#行-C #context, 前后各#行-e實現多個選項間的邏輯or關系grep –e ‘cat ’ -e ‘dog’ file-w匹配整個單詞-E使用ERE,相當于egrep-F相當于fgrep,不支持正則表達式
舉例子:
1、查找文件內容包含root的行數
2、查找文件內容不包含root的行
3、查找以s開頭的行
4、查找以n結尾的行
三、sed
sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。然后讀入下行,執行下一個循環。如果沒有使諸如‘D’ 的特殊命令,那會在兩個循環之間清空模式空間,但不會清空保留空間。這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。
sed [option]... 'script' inputfile
- 選項
-n不輸出模式空間內容到屏幕,即不自動打印-e多點編輯-f/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本-r支持使用擴展正則表達式- -i 直接編輯文件
-i.bak備份文件并原處編輯
- script 地址定界
- 不給地址:對全文進行處理
- 單地址:
#: 指定的行,$:最后一行/pattern/:被此處模式所能夠匹配到的每一行 - 地址范圍:
#,##,+#/pat1/,/pat2/
`#,/pat1/ - ~:步進
1~2 奇數行
2~2 偶數行
- 編輯命令:
d刪除模式空間匹配的行,并立即啟用下一輪循環p打印當前模式空間內容,追加到默認輸出之后a [\]text1在指定行后面追加文本,支持使用\n實現多行追加i [\]text在行前面插入文本c [\]text替換行為單行或多行文本w /path/somefile保存模式匹配的行至指定文件r /path/somefile讀取指定文件的文本至模式空間中匹配到的行后=為模式空間中的行打印行號!模式空間中匹配行取反處理- s///:查找替換,支持使用其它分隔符,s@@@,s###
替換標記:g行內全局替換p顯示替換成功的行w /PATH/TO/SOMEFILE將替換成功的行保存至文件中
舉例子:
1、打印出文件第二行
2、打印出2-5行的內容
3、將文件中的root全部替換為abc
直接修改讀取的文件內容,而不是輸出到終端。
s :取代,可以直接進行取代的工作。
g: 是全局的意思。其中#是格式符,他也可以是@或者別的/。
Sed替換格式是:sed -i ‘s/要替換的內容/替換成的內容/g’ 文件名。
四、awk
報告生成器,格式化文本輸出,有多種版本:New awk(nawk),GNU awk( gawk)
awk [options] 'program' file…
- program:pattern{action statements;..}
- pattern部分決定動作語句何時觸發及觸發事件
BEGIN,END - action statements對數據進行處理,放在{}內指明
print, printf
- pattern部分決定動作語句何時觸發及觸發事件
- 選項:
-F指明輸入時用到的字段分隔符-v var=value自定義變量 - 分割符、域和記錄
awk執行時,由分隔符分隔的字段(域)標記1,1,2..n稱為域標識,n稱為域標識,0為所有域。
省略action,則默認執行 print $0 的操作。 -
變量
FS:輸入字段分隔符;OFS:輸出字段分隔符;RS:輸入記錄分隔符;ORS:輸出記錄分隔符;NF:字段數量;NR:記錄號;NFR:各文件分別計數,記錄號。FILENAME:當前文件名;ARGC:命令行的參數;ARGV:數組,保存的是命令行所給定的各參數。注意:以上都是內置變量,在引用時不需要前面加$,每新建一個變量,都需要加個-v,與變量名之間有無空格都可以,變量可以在引用之后再聲明,但那一行的輸出會輸出空行。
-
printf命令
printf “FORMAT” , item1, item2, ...不會自動換行,FORMAT中需要分別為后面每個item指定格式符。- 格式符
格式符 item表現形式 %c 顯示字符的ASCII碼 %d, %i 顯示十進制整數 %e, %E 顯示科學計數法數值 %f 顯示為浮點數 %g, %G 以科學計數法或浮點形式顯示數值 %s 顯示字符串 %u 無符號整數 %% 顯示%自身 - 修飾符
格式符 item表現形式 #[.#] 第一個數字控制顯示的寬度;第二個#表示小數點后精度,%3.1f – 左對齊(默認右對齊) %-15s + 顯示數值的正負符號 %+d -
操作符
- 算術操作符:x+y, x-y, x*y, x/y, x^y, x%y
-x: 轉換為負數
+x: 轉換為數值 - 比較操作符:==, !=, >, >=, <, <=
- 模式匹配符:~:左邊是否和右邊匹配包含 !~:是否不匹配
- 邏輯操作符:與&&,或||,非!
- 函數調用:
function_name(argu1, argu2, ...) - 條件表達式(三目表達式):
selector?if-true-expression:if-false-expression
- 算術操作符:x+y, x-y, x*y, x/y, x^y, x%y
- PATTERN:根據pattern條件,過濾匹配的行,再做處理
- 如果未指定:空模式,匹配每一行
/regular expression/:僅處理能夠模式匹配到的行,需要用/ /括起來- relational expression: 關系表達式,結果為“真”才會被處理
- line ranges:行范圍 startline,endline:
/pat1/,/pat2/不支持直接給出數字格式 - BEGIN/END模式
- awk控制語句
{ statements;… }組合語句if(condition) {statements;…}if(condition) {statements;…} else {statements;…}while(conditon) {statments;…}do {statements;…} while(condition)for(expr1;expr2;expr3) {statements;…}breakcontinuedelete array[index]delete arrayexit
awk [-F|-v] '行數篩選{XXX;XXX;printf “”,XXX,XXX}'
舉例子:
1、打印文件第一列:
這里的分隔符是冒號 ,然后print打印第一列
2、輸出字段1,3,6,以制表符作為分隔符
awk詳解:https://www.cnblogs.com/xudong-bupt/p/3721210.html
總結
以上是生活随笔為你收集整理的Linux三剑客(grep、sed、awk)(Download)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 八图h5怎么发给朋友_最酷h5场景
- 下一篇: SVN汉化包安装方法「建议收藏」