sed命令行格式:sed [options] 'command' file(s)
創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)提供從項目策劃、軟件開發(fā),軟件安全維護、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評估等整套的建站服務(wù),主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè),成都App制作以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。創(chuàng)新互聯(lián)公司深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
options常用選項:
-n或--quiet或——silent:僅顯示script處理后的結(jié)果;
-e:以選項中的指定的script來處理輸入的文本文件;
-f:以選項中指定的script文件來處理輸入的文本文件;
-r∶sed 的動作支援的是延伸型正規(guī)表示法的語法;
-i∶直接修改讀取的檔案內(nèi)容,而不是由螢?zāi)惠敵?
-h或--help:顯示幫助;
-V或--version:顯示版本信息。
Command常用命令:
a:新增,a 的后面可以接字符串,而這些字符串會在新的一行出現(xiàn)(目前的下一行);
c:取代,c 的后面可以接字符串,這些字符串可以取代 n1,n2 之間的行;
d:刪除,d 后面通常不接任何字符串;
i:插入,i 的后面可以接字符串,而這些字符串會在新的一行出現(xiàn)(目前的上一行);
p:列印,亦即將某個選擇的資料印出。通常 p 會與參數(shù) sed -n 一起運作;
s:取代,可以直接進(jìn)行取代的工作,通常與正規(guī)表達(dá)式搭配使用。
實例說明:
新增操作:a命令
sed '/^bird/a\test' file將test追加到 以bird開頭的行后面
刪除操作:d命令
sed '/^$/d' file #刪除空白行;
sed '2d' file #刪除第二行;
sed '2,$d' file #刪除第2行到最后一行;
sed '$d' file #刪除最后一行;
sed '/^bird/'d file #刪除所有開頭是bird的行;
插入操作:i命令
sed -i '3i\bird ' bird.conf #在bird.conf文件第3行之前插入bird
替換文本中的字符串:s命令
sed 's/bird/birds/' file #將文本中的bird替換成birds;
sed -i 's/ bird / birds /g' file #將file文件中每一行的第一個bird替換為birds;
在生產(chǎn)環(huán)境中,往往沒有條件給我們?nèi)ebug排查,更多時候我們是通過日志來看具體的報錯日期。
但是日志往往是一直在實時更新,而且記錄條數(shù)龐大,很難直接定位到錯誤信息。這個時候,就可以利用sed命令來截取指定時間段內(nèi)的日志(也是網(wǎng)上大多數(shù)博主的做法)。
具體命令如下:
這條命令可以查詢2020.10.13號當(dāng)天9點到9點十分中間的所有的日志信息。
但是這條命令的使用有兩個前提(很多網(wǎng)上的博主都沒有提到)
第一,日志輸出的日期格式是要滿足命令中的格式 ,如果不是的話就跟著實際的格式改
第二,輸入的日期必須要真實存在?。?! ,比如說9點整剛好沒有日志輸出,那么這條命令就會失效
更加通配的命令可以是這樣, 使用 號*
這樣無論九點整的時候是否有日志產(chǎn)生,就都可以獲取到9點整到現(xiàn)在的所有日志了
使用 ,將截取到的內(nèi)容輸出到指定的文件中,方便進(jìn)一步查看
ps:在實際操作中,我們一般會在后面加grep命令做進(jìn)一步的關(guān)鍵字過濾
如上圖,某個服務(wù)器的日志文件,通過命令
grep "Send kafka Success" 2021-08-01-info.log | grep "result_size:100"
可以得到相關(guān)日志?,F(xiàn)在要求統(tǒng)計所有result_size累加的結(jié)果。
grep "Send kafka Success" 2021-08-01-info.log | grep -o -E "result_size:[0-9]+" | awk -F ':' 'BEGIN{print "開始統(tǒng)計result_size累加和"} {sumSize+=$2 } END{print "sumSize="sumSize}'
sed 命令可以很好的進(jìn)行行匹配,但從某一行中精確匹配某些內(nèi)容,則使用 grep 命令并輔以 -o 和 -E 選項可達(dá)到此目的。其中 -o 表示“only-matching”,即“僅匹配”之意。光用它不夠,配合 -E 選項使用擴展正則表達(dá)式則威力巨大。
比如下面有一條文本 tmp.txt ,其中內(nèi)容為:
{"aid":45,"path":"attachment/Mon_1112/2_1_5728040df3ab346.jpg"}
我們想從中過略出 aid 的值即 45 ,那么可以先如下這么做:
grep -o -E 'aid":[1-9]*' tmp.txt
得到的結(jié)果為:
aid":45
這時就好辦了,我們可以使用 awk 的 -F 選項指示出冒號分隔符,這樣就容易過濾出 45 這個值來,整個命令綜合如下:
grep -o -E 'aid":[1-9]*' tmp.txt |awk-F: '{print $2}'
參考文檔:
命令格式: sed -n '/起始時間/','/結(jié)束時間/p' [日志文件]
eg1 :
注:
日期時間格式要和日志文件中的保持一致;
eg2 :
nginx中的日期時間格式和eg1中的格式不一致,這時使用的命令是:
注:
使用“\”是為了轉(zhuǎn)義“/”,不然命令行會報錯
也可以將輸出的命令行內(nèi)容輸出到一個文本文件中,這樣方便用編輯器查看,命令是:
eg3 :
這樣輸出的內(nèi)容就會保存在gfc.log文本文件中。
eg: