Linux三劍客awk命令篇二:命令操作符
讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請(qǐng)域名、網(wǎng)絡(luò)空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、武安網(wǎng)站維護(hù)、網(wǎng)站推廣。
關(guān)于awk的原理等基本知識(shí)請(qǐng)參考上篇:
Linux三劍客awk命令篇一:原理及基本命令
補(bǔ)充
1、語(yǔ)法格式:
(1) Awk完整語(yǔ)法
awk 'BEGIN{commands} pattern{commands}END{commands} ' file
BEGIN{commands}:處理數(shù)據(jù)前執(zhí)行的命令。
END{commands}:處理完數(shù)據(jù)后執(zhí)行的命令。
這兩個(gè)命令可以省略。見(jiàn)(2)
(2) Awk基本語(yǔ)法
awk -F '分割符' '/模式/{動(dòng)作} ' file
這里的 '/模式/{動(dòng)作} ' 類(lèi)似于sed的命令格式。
模式:
(1) 正則表達(dá)式(注意格式: /正則表達(dá)式/ )
(2) 條件表達(dá)式(例如: 等等)
總結(jié):
這里的模式通俗來(lái)講是 用來(lái)找誰(shuí), 而動(dòng)作表示是 干啥。
2、 awk的命令操作符
(1) 正則表達(dá)式與bash一致
(2) + - * / % ++ --
(3) || !
(4) = = != == ~ !~
~:表示匹配后面的模式,用于字段,見(jiàn) 案例1 。
其余的都比較常見(jiàn)就不舉例了。
3、案例
案例1:
~使用案例
awk -F : '$3 ~ /\...\/{print $1,$3}' /etc/passwd
解釋?zhuān)?/p>
模式:\...\
\ \表示定界符,只匹配3個(gè)字符。
$3 ~:表示$3這個(gè)字段必須符合后面模式(\...\)的要求。
見(jiàn)如下輸出結(jié)果,$3都是3個(gè)字符。
案例2:
% || ==使用案例
seq 100 | awk '$1 % 7 == 0 || $1 ~ /^99/{print $1}'
輸出結(jié)果的要求:
整除7或者以99開(kāi)頭
案例3:
++使用
awk 'BEGIN{num=0}{num++}END{print num}' /etc/passwd
簡(jiǎn)單解釋?zhuān)?/p>
BEGIN{num=0}:定義一個(gè)變量num
{num++}:這里沒(méi)有模式,只有動(dòng)作。
即每匹配到文件/etc/passwd的一行就執(zhí)行num++
END{print num}:文件遍歷結(jié)束,打印num的值,即文件的行數(shù)。
這里我們使用wc -l驗(yàn)證也是沒(méi)問(wèn)題的。
cat /etc/passwd | wc -l
上面3個(gè)案例簡(jiǎn)單的使用了awk的命令操作符。
雖然只是用到了幾個(gè)簡(jiǎn)單的,但是其他同理,大家可以執(zhí)行操作。
下一篇:
Linux三劍客awk命令篇二之內(nèi)部變量
歡迎大家給予寶貴的意見(jiàn)或者建議。
歡迎大家補(bǔ)充或者共享一些其他的方法。
感謝支持。
說(shuō)起Linux操作系統(tǒng)中的 grep 命令,或許沒(méi)有人會(huì)不知道。在我看來(lái), grep 命令是Linux操作系統(tǒng)上最強(qiáng)大的工具之一,正如你無(wú)時(shí)無(wú)刻不在使用它。無(wú)論是從文件中找到匹配的行,又或者是從終端輸出中獲取指定信息,都離不開(kāi)對(duì) grep 的使用。
了解一個(gè)工具的使用,還是先看這個(gè)工具的man手冊(cè)會(huì)告訴我們什么。
手冊(cè)中提到, grep 工具還有兩個(gè)孿生兄弟,分別是 egrep 和 fgrep 。其中, egrep 相當(dāng)于 grep -E 的用法,使用的是擴(kuò)展形式的正則表達(dá)式; fgrep 相當(dāng)于 grep -F 的用法,根據(jù)固定模式進(jìn)行內(nèi)容匹配。
對(duì)于任何的Linux操作系統(tǒng),你可以很輕松的找到 /etc/passwd 文件,以下的多數(shù)演示將會(huì)以該文件進(jìn)行演示。以下為用戶(hù)的部分信息
grep 命令的格式相對(duì)比較簡(jiǎn)單。完整的命令格式如 grep [OPTIONS] PATTERN [FILE...] ,其中 [OPTIONS] 選項(xiàng)提供了眾多的參數(shù),如下
如果需要找到包含 root 用戶(hù)和 adm 用戶(hù)的行,可以通過(guò) grep -E "root|adm" /etc/passwd 來(lái)查找所有滿(mǎn)足的行
了解 grep 的常用參數(shù)可以在工作中解決絕大部份的問(wèn)題,但在一些情況下,需要對(duì)過(guò)濾出的內(nèi)容按照某種規(guī)則進(jìn)行精確匹配,還需要配合正則使用。以下介紹了幾種常用的正則語(yǔ)法
可以根據(jù)文件指定分隔符,像處理表格一樣處理文本或序列。通常來(lái)處理字段,并基于字段進(jìn)行過(guò)濾,或進(jìn)行模式匹配。
語(yǔ)法
常用的內(nèi)建變量
NF :記錄的字段數(shù)
NR :記錄的行號(hào)
OFS :輸出字段分隔符,默認(rèn)值與輸入字段分隔符一致。
ORS :輸出記錄分隔符(默認(rèn)值是一個(gè)換行符)
$n :當(dāng)前記錄的第n個(gè)字段,字段間由FS分隔
$0 :完整的輸入記錄
ARGV :包含命令行參數(shù)的數(shù)組
ARGC :命令行參數(shù)的數(shù)目
基本用法
awk 腳本
關(guān)于 awk 腳本,我們需要注意兩個(gè)關(guān)鍵詞 BEGIN 和 END。
BEGIN{ 這里面放的是執(zhí)行前的語(yǔ)句 }
END {這里面放的是處理完所有的行后要執(zhí)行的語(yǔ)句 }
{這里面放的是處理每一行時(shí)要執(zhí)行的語(yǔ)句
以上的應(yīng)用案例基本包括了常用的awk 的常用用法,更復(fù)雜的文本處理則可以通過(guò)awk 腳本完成。
與awk 相比,sed在處理文本的行具有更好的效率。
基本語(yǔ)法
參數(shù)說(shuō)明
sed 文件處理命令
包括增加、刪除、打印、替換行的內(nèi)容
應(yīng)用案例
以上的案例表明,sed 的一些操作可以放在行的末尾,或者放在模式匹配的末尾,或者在大括號(hào)內(nèi)以分號(hào)分隔,或者通過(guò)-e 命令,實(shí)現(xiàn)多點(diǎn)編輯。
grep 查找文件里符合條件的字符串。
語(yǔ)法
應(yīng)用案例
grep 除了可以查找單個(gè)文件中匹配的模式,也可以在目錄中包含特定字符的文件查找匹配模式的行。
三劍客各有所長(zhǎng),和鍋鍋一一搞起就是了!
使用示例:
使用示例:
使用示例:
sed [選項(xiàng)] s/[pattern]/[replace]/[flags]
[選項(xiàng)]常用的幾個(gè)參數(shù):
[pattern]
含義:待匹配的需要替換的內(nèi)容。
[replace]
常見(jiàn)的特殊含義字符:
[flags]
常見(jiàn)的可選參數(shù):
多個(gè)sed命令依次執(zhí)行,用分號(hào)分割或加選項(xiàng) -e,
使用示例:
把 test.html 文件中的第二個(gè) body 替換為 /body 。
分析實(shí)際就是把第二個(gè) body 替換為 /body,命令如下。
把 test.html 文件中的第二個(gè) body 替換為 /body 。
分析實(shí)際就是把第二個(gè) body 替換為 /body,命令如下。
編寫(xiě)執(zhí)行腳本的步驟如下:
touch sed.sh
sed.sh 中寫(xiě)入腳本內(nèi)容:
對(duì)sed.sh 腳本賦予可執(zhí)行權(quán)限
chmod ug+x sed.sh
執(zhí)行sed.sh 腳本,對(duì)文件進(jìn)行處理
sed -i -f sed.sh test.html