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