Linux三劍客awk命令篇二:命令操作符
10年積累的成都網(wǎng)站制作、網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計制作后付款的網(wǎng)站建設(shè)流程,更有吉安免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
關(guān)于awk的原理等基本知識請參考上篇:
Linux三劍客awk命令篇一:原理及基本命令
補充
1、語法格式:
(1) Awk完整語法
awk 'BEGIN{commands} pattern{commands}END{commands} ' file
BEGIN{commands}:處理數(shù)據(jù)前執(zhí)行的命令。
END{commands}:處理完數(shù)據(jù)后執(zhí)行的命令。
這兩個命令可以省略。見(2)
(2) Awk基本語法
awk -F '分割符' '/模式/{動作} ' file
這里的 '/模式/{動作} ' 類似于sed的命令格式。
模式:
(1) 正則表達式(注意格式: /正則表達式/ )
(2) 條件表達式(例如: 等等)
總結(jié):
這里的模式通俗來講是 用來找誰, 而動作表示是 干啥。
2、 awk的命令操作符
(1) 正則表達式與bash一致
(2) + - * / % ++ --
(3) || !
(4) = = != == ~ !~
~:表示匹配后面的模式,用于字段,見 案例1 。
其余的都比較常見就不舉例了。
3、案例
案例1:
~使用案例
awk -F : '$3 ~ /\...\/{print $1,$3}' /etc/passwd
解釋:
模式:\...\
\ \表示定界符,只匹配3個字符。
$3 ~:表示$3這個字段必須符合后面模式(\...\)的要求。
見如下輸出結(jié)果,$3都是3個字符。
案例2:
% || ==使用案例
seq 100 | awk '$1 % 7 == 0 || $1 ~ /^99/{print $1}'
輸出結(jié)果的要求:
整除7或者以99開頭
案例3:
++使用
awk 'BEGIN{num=0}{num++}END{print num}' /etc/passwd
簡單解釋:
BEGIN{num=0}:定義一個變量num
{num++}:這里沒有模式,只有動作。
即每匹配到文件/etc/passwd的一行就執(zhí)行num++
END{print num}:文件遍歷結(jié)束,打印num的值,即文件的行數(shù)。
這里我們使用wc -l驗證也是沒問題的。
cat /etc/passwd | wc -l
上面3個案例簡單的使用了awk的命令操作符。
雖然只是用到了幾個簡單的,但是其他同理,大家可以執(zhí)行操作。
下一篇:
Linux三劍客awk命令篇二之內(nèi)部變量
歡迎大家給予寶貴的意見或者建議。
歡迎大家補充或者共享一些其他的方法。
感謝支持。
可以根據(jù)文件指定分隔符,像處理表格一樣處理文本或序列。通常來處理字段,并基于字段進行過濾,或進行模式匹配。
語法
常用的內(nèi)建變量
NF :記錄的字段數(shù)
NR :記錄的行號
OFS :輸出字段分隔符,默認(rèn)值與輸入字段分隔符一致。
ORS :輸出記錄分隔符(默認(rèn)值是一個換行符)
$n :當(dāng)前記錄的第n個字段,字段間由FS分隔
$0 :完整的輸入記錄
ARGV :包含命令行參數(shù)的數(shù)組
ARGC :命令行參數(shù)的數(shù)目
基本用法
awk 腳本
關(guān)于 awk 腳本,我們需要注意兩個關(guān)鍵詞 BEGIN 和 END。
BEGIN{ 這里面放的是執(zhí)行前的語句 }
END {這里面放的是處理完所有的行后要執(zhí)行的語句 }
{這里面放的是處理每一行時要執(zhí)行的語句
以上的應(yīng)用案例基本包括了常用的awk 的常用用法,更復(fù)雜的文本處理則可以通過awk 腳本完成。
與awk 相比,sed在處理文本的行具有更好的效率。
基本語法
參數(shù)說明
sed 文件處理命令
包括增加、刪除、打印、替換行的內(nèi)容
應(yīng)用案例
以上的案例表明,sed 的一些操作可以放在行的末尾,或者放在模式匹配的末尾,或者在大括號內(nèi)以分號分隔,或者通過-e 命令,實現(xiàn)多點編輯。
grep 查找文件里符合條件的字符串。
語法
應(yīng)用案例
grep 除了可以查找單個文件中匹配的模式,也可以在目錄中包含特定字符的文件查找匹配模式的行。
1、Linux 三劍客是(grep,sed,awk)三者的簡稱,熟練使用這三個工具可以提升運維效率。
2、Linux 三劍客以正則表達式作為基礎(chǔ),而在Linux系統(tǒng)中,支持兩種正則表達式,分別為“標(biāo)準(zhǔn)正則表達式”和“擴展正則表達式”。
3、在掌握好正則表達式后,將具體講解三劍客的用法。
4、可以看到標(biāo)準(zhǔn)正則表達的使用過程中,許多符號都需要轉(zhuǎn)義,這在工作中帶來了一定的不便,因此擴展的正則表達式便出現(xiàn)了。
說起Linux操作系統(tǒng)中的 grep 命令,或許沒有人會不知道。在我看來, grep 命令是Linux操作系統(tǒng)上最強大的工具之一,正如你無時無刻不在使用它。無論是從文件中找到匹配的行,又或者是從終端輸出中獲取指定信息,都離不開對 grep 的使用。
了解一個工具的使用,還是先看這個工具的man手冊會告訴我們什么。
手冊中提到, grep 工具還有兩個孿生兄弟,分別是 egrep 和 fgrep 。其中, egrep 相當(dāng)于 grep -E 的用法,使用的是擴展形式的正則表達式; fgrep 相當(dāng)于 grep -F 的用法,根據(jù)固定模式進行內(nèi)容匹配。
對于任何的Linux操作系統(tǒng),你可以很輕松的找到 /etc/passwd 文件,以下的多數(shù)演示將會以該文件進行演示。以下為用戶的部分信息
grep 命令的格式相對比較簡單。完整的命令格式如 grep [OPTIONS] PATTERN [FILE...] ,其中 [OPTIONS] 選項提供了眾多的參數(shù),如下
如果需要找到包含 root 用戶和 adm 用戶的行,可以通過 grep -E "root|adm" /etc/passwd 來查找所有滿足的行
了解 grep 的常用參數(shù)可以在工作中解決絕大部份的問題,但在一些情況下,需要對過濾出的內(nèi)容按照某種規(guī)則進行精確匹配,還需要配合正則使用。以下介紹了幾種常用的正則語法
sed編輯器是一行一行的處理文件,正在處理的內(nèi)容存放在模式空間(緩沖區(qū))中,處理完畢后按照選項的規(guī)定進行輸出或文件的修改。
sed主要用來自動編輯一個或多個文件;簡化文件的反復(fù)操作,用于非交互編譯文件。
可以使用一個簡單的數(shù)字,或是一個行號范圍
注意:p的動作是:打印匹配行。
1. 原始文件:
2. sed的默認(rèn)動作
(1)sed的默認(rèn)動作是打印文件中的所有行。
3. 打印特定行
(1)因為sed命令默認(rèn)打印文件中所有行。所以第三行會被打印兩遍。那如何只打印第三行呢?使用【-n】命令,只打印匹配的行。
(2)使用【-n】命令,只打印匹配到的行
(3)打印[n,m]行
(4)打印包含模式的行
(5)打印包含模式和指定行號之間的行
(6)包含模式和包含模式之間的行
(7) {}執(zhí)行多個命令(command),使用;隔開。=是顯示文件行的行號。p是打印匹配行
(8)!取反操作
(9)q命令:第一個模式匹配完成后退出或立即退出,使用該命令打印前5行
(1)使用[]進行正則匹配
(2)其他的正則表達式
(1)打印出以#開頭的行,然后用!進行反選,則表示過濾掉以#開頭的行,不會過濾掉空格。
(2)匹配以#開頭的行,進行取反,則打印出非#開頭的行,然后其結(jié)果在對空格開頭的行進行取反。即 過濾掉以#開頭的行和以空格開頭的行。 {}表示在定位行執(zhí)行的命令組。
(3)sed支持對單個文件實現(xiàn)不同的操作,每個操作用-e參數(shù)。定位到執(zhí)行的行后,使用d命令,直接刪除匹配到的行。
需要注意的是,對源文件的添加要使用【-i】參數(shù)。
s:使用替換模式替換相應(yīng)模式
(1)在匹配行前面替換字符,使用【s】命令。
(2)在所有行開頭替換元素【s】
(3)在所有行的末尾替換元素
(4)指定行,進行替換操作
(5)【】符號代表的是匹配到的字符。在匹配到字符后,可以使用代替。
(6)在匹配到行前面添加一行,使用【i】的命令
(7)在匹配行的后面添加一行,使用【a】命令
(8)當(dāng)添加多行時,使用\n來轉(zhuǎn)義
(9)@代表的是【地址定界符】,一般由三個組成,定界符可以是/,$,#等特殊字符,此命令表示,匹配特定字符的行進行替換。
(10)使用命令【g】修改全文中出現(xiàn)的匹配字符。
(11)若后面接數(shù)字之后在接g,表示匹配的行中,第幾次出現(xiàn)。就替換,2g表示替換行中第二次出現(xiàn)。
(1)刪除以非#號開頭的行,即顯示以#號開頭的行。
(2)刪除第一行
(3)刪除最后一行
(4)刪除指定的行區(qū)間
(5)刪除包含特定單詞的行
本文參考:
sed命令詳解
三劍客各有所長,和鍋鍋一一搞起就是了!
使用示例:
使用示例:
使用示例:
sed [選項] s/[pattern]/[replace]/[flags]
[選項]常用的幾個參數(shù):
[pattern]
含義:待匹配的需要替換的內(nèi)容。
[replace]
常見的特殊含義字符:
[flags]
常見的可選參數(shù):
多個sed命令依次執(zhí)行,用分號分割或加選項 -e,
使用示例:
把 test.html 文件中的第二個 body 替換為 /body 。
分析實際就是把第二個 body 替換為 /body,命令如下。
把 test.html 文件中的第二個 body 替換為 /body 。
分析實際就是把第二個 body 替換為 /body,命令如下。
編寫執(zhí)行腳本的步驟如下:
touch sed.sh
sed.sh 中寫入腳本內(nèi)容:
對sed.sh 腳本賦予可執(zhí)行權(quán)限
chmod ug+x sed.sh
執(zhí)行sed.sh 腳本,對文件進行處理
sed -i -f sed.sh test.html