grep、sed、awk是linux功能非常強(qiáng)大的三個(gè)命令,grep是查找過(guò)濾文本,sed是對(duì)文本進(jìn)行編輯替換,awk是對(duì)文本進(jìn)行分析報(bào)告。
成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,提供成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);可快速的進(jìn)行網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,是專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
最簡(jiǎn)單的理解就是找什么東西用grep,想修改什么內(nèi)容用sed,想格式化內(nèi)容用awk。
創(chuàng)建一個(gè)文件名為grep_text.txt的文件,并放入內(nèi)容:
SillyMadman is both a madman and a fool.
Everyone agrees with this sentence.
我要查找在grep_text.txt文件里有Silly的行
命令是: grep Silly grep_text.txt
會(huì)返回內(nèi)容:SillyMadman is both a madman and a fool.
也可以帶以下參數(shù),這些我認(rèn)為可能容易用到的參數(shù),其它的參數(shù)需要另行查找
文檔,比如可以使用正則進(jìn)行匹配。
內(nèi)容相關(guān)的
-B, --before context=NUM顯示所在行之前的行數(shù)
-A, --after context=NUM顯示所在行之后的行數(shù)
-C, --context=NUM打印輸出上下文的行數(shù)
過(guò)濾內(nèi)容相關(guān)的參數(shù):
-i, --忽略大小寫區(qū)分
-w,--匹配查找的整個(gè)單詞
-x,--匹配查找的整行文本
-v, --過(guò)濾掉匹配的內(nèi)容
輸出內(nèi)容相關(guān)的參數(shù)
-n, --行號(hào)打印帶有輸出行的行號(hào)
比如,我要查找在grep_text.txt文件里不區(qū)分大小寫查找sillymadman,并顯示行號(hào)和匹配文本的下一行,那么我可以用以下命令查找
grep sillymadman grep_text.txt -i -n -A1
內(nèi)容返回為
1:SillyMadman is both a madman and a fool.
2-Everyone agrees with this sentence.
總體而言grep的使用方式就是
grep [參數(shù)...](查找的內(nèi)容) (文件名)
grep也經(jīng)常搭配管道符號(hào)"|"使用,比如我要查詢某程序的進(jìn)程,并去掉查找進(jìn)程本身,那么命令為
ps -ef | grep program_name | grep -v grep
再創(chuàng)建一個(gè)文件名為sed_text.txt的文件,并放入內(nèi)容:
SillyMadman is both a madman and a fool.
Everyone agrees with this sentence.
我想要在第一行下面添加一句:woshishazi
命令是:sed '1a\woshishazi' sed_text.txt
返回內(nèi)容為:
SillyMadman is both a madman and a fool.
woshishazi
Everyone agrees with this sentence.
但是以上這個(gè)命令不會(huì)修改原文件,如果需要,需要加上-i
sed -i '1a\woshishazi' sed_text.txt
上面a是代表append,從指定行后面新的一行添加數(shù)據(jù),還有其他操作
操作有以下這些
a :從下面一行新增
i :從上面一行插入,
d :刪除
c :整行替換
p :打印
s :對(duì)指定內(nèi)容進(jìn)行替換
下面稍微舉下例:
a: sed '1a\woshishazi' sed_text.txt 從第一行后面添加
i: sed '1i\woshishazi' sed_text.txt 從第一行前面插入
d: sed '1d' sed_text.txt 刪除第一行
c: sed '1c\woshishazi' sed_text.txt 替換第一行內(nèi)容為woshishazi
p: sed -n '1p' sed_text.txt 打印第一行,一般搭配-n使用,其他內(nèi)容就不會(huì)再展示
s:這個(gè)相對(duì)復(fù)雜一點(diǎn)需要詳細(xì)說(shuō)明一下
sed的參數(shù)為 '[行]s/要被替換的內(nèi)容/新的內(nèi)容/g'
行是一個(gè)可選項(xiàng),可以選擇具體的行進(jìn)行替換
g代表替換所有匹配到的內(nèi)容,也可以改為數(shù)字,表示第幾次匹配到時(shí)進(jìn)行替換
sed 's\SillyMadman\shafengzi\g' sed_text.txt ,將所有SillyMadman替換為shafengzi
輸出結(jié)果為:
shafengzi is both a madman and a fool.
Everyone agrees with this sentence.
最后再創(chuàng)建一個(gè)文件名為awk_text.txt的文件,并放入內(nèi)容:
1 a
2 b
3 c
4 d
5 f
以空白符作為分隔符這個(gè)文本相當(dāng)于每一行有兩個(gè)字段。
那么打印第一個(gè)字段時(shí) awk '{print 0的話,則代表打印所有字段
awk默認(rèn)以空白符作為分隔符,也可以指定分割符通過(guò)-F
awk -F: '{print $1}' awk_text.txt,以“:”作為作為分隔符
那么返回內(nèi)容就為
1 a
2 b
3 c
4 d
5 f
相當(dāng)于只有一列或者說(shuō)一個(gè)字段
然后還可以對(duì)前面加上一個(gè)正則對(duì)行進(jìn)行匹配內(nèi)容
awk '/a/{print 2 ~ /a/){print $1}' awk_text.txt
返回內(nèi)容為
1
可以根據(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è)文件中匹配的模式,也可以在目錄中包含特定字符的文件查找匹配模式的行。
Linux三劍客awk命令篇二:命令操作符
關(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)作} ' 類似于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
解釋:
模式:\...\
\ \表示定界符,只匹配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)單解釋:
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ǔ)充或者共享一些其他的方法。
感謝支持。
三劍客各有所長(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,命令如下。
編寫執(zhí)行腳本的步驟如下:
touch sed.sh
sed.sh 中寫入腳本內(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
網(wǎng)站名稱:linux三劍客命令合集 linux三大劍客
當(dāng)前網(wǎng)址:http://www.chinadenli.net/article48/ddihoep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、服務(wù)器托管、網(wǎng)站改版、網(wǎng)站制作、外貿(mào)建站、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)