linux下寫shell指令碼基本上都會或多或少的處理一些瑣碎的文字處理,這其中就會使用到不同的文字處理工具或命令,與windows下的batch指令碼相比,linux的shell本身也是有一些字元處理的能力的,但是比較難記和使用,而且功能不夠強大,使用起來不是很舒服。下面來介紹一下linux中常用的幾個文字處理工具:
1 grep 命令
grep [-acivn] "searchstr" 【filename】
引數:-a 在二進位制檔案中以文字形式搜尋
-c 計算並返回查到到的此數【c代表count】
-i 忽略大小寫匹配【i代表ignore case】
-v 反向輸出,僅輸出與搜尋字元不匹配的內容
-n 輸出結果的時候同時輸出在原檔案內的行號
-e 使用擴充套件正則模式【e代表expand】
"searchstr"
可以是具體的字串,也可以是正規表示式,當使用正則時可以配合-e引數
filename
指定搜尋的原內容,是可選項,不選時預設以當前目錄為引數,還可以通過管道命令來傳輸
2 sed 工具[該工具用於行間的內容操作,如增刪改,查詢替換]
sed [-nefr] [操作行為] filename
引數:-n 安靜模式,僅顯示被處理的行【n代表silent】
-e 在命令列上進行sed操作編輯【e代表edit】
-f 將sed命令寫入乙個檔案內,-f filename 則執行該檔案下的sed命令
-r 設定支援擴充套件的正規表示式
操作行為:
格式1:[n1[,n2]動作]
n1,n2代表操作的範圍的起始和終了的行數值,都是可選的。
格式2:/pattern/ 動作
pattern 是字元內容,然後sed會匹配包含該內容的行,可以使用正則匹配
動作的內容有:
c 替換操作範圍內的內容【c代表change】
d 刪除操作範圍內的內容【d代表delete】
i 當前行的上一行插入一行內容【i代表insert】
p 列印某行行的內容【p代表print】 sed '3p' 列印
s 搜尋及替換所搜尋的內容,可以使用正則【s代表search】,使用方式類似於vi中的替換句法
格式:s/search/replace/flag
flag: 為數字時代表對第幾次匹配的項操作
為g是代表全域性範圍內適用,global
為p時表示應列印替換後的內容
為w file時表示替換結果寫入到指定檔案內,而不改變原檔案內容
y 轉換命令,將指定的字元換為期望的字元,是但字元處理和轉換。如sed '2,4y/1234/abcd/'
所有1都轉換成a,2->b,3->c, 4->d。若指定了重複的轉換則以第一次指定的為準。比如1指定了2個轉換符,則第一次指定 的生效
w filename 將選項的內容寫入到指定檔案中。如:sed '2,4w test.txt' inputfile 將inputfile中的2-4行的內容寫入到test檔案裡
r filename 將從filename檔案中讀取內容寫入到指定的行中。如:sed '2r test.txt' inputfile 是將test檔案中的內容讀出來寫入到inptufile檔案的第二行後面,即插入到第三行前面。等價於cat test.txt | sed '2a' inputfile
此外在對操作物件需要進行多種操作行為時可以使用組合命令: 如:
sed '2'
舉例:
last | sed '2,5d' 將刪除第二和第五行之間的內容
last | sed '1,20s/^$/test/g' 全域性範圍內搜尋空行並替換為test字元
3 awk 工具【該工具用於處理有欄位規則的行內內容,並支援格式化輸出】
awk [options] '條件型別1 條件型別2....' filename
options"
-f fs 指定fs變數的初始值
-f filename 指定讀取程式的檔案【即存放awk指令碼操作的檔案】
-v var=value 定義awk的臨時變數及值,而後可以在awk中使用變數
-mf n 指定最大的字段數【max field】
-mr n 指定最大的記錄數【max record】
-w keyword 指定相容模式
內建變數:
nf 當前行的字段總數 [number of field]
nr 當前為止已處理的行數,即當前行號 [number of row]
$0,$1,....$n $0代表當前行的內容,$1代表當前行被分割後的第乙個欄位的內容
fs 當前的字段分割符。預設為空格 [file splitter]
rs 當前的行分割符。預設為回車
fieldwidths 定義數字字段顯示的寬度
ofs 輸出字段分割符,預設空格
ors 輸出行分割符,預設回車
條件比較操作符:
>
<
>=
<= ==
!=用於條件型別的的條件比較運算,通常是用行內變數的比較結果來判斷是否執行相應的動作 如:
nf==10
$1>3
條件選項的正則運用:
條件選項可以是任何的表示式,但主要還是利用awk自身的變數值進行判斷,當條件為空時預設為無條件執行動作,有條件但為假時則不執行其後的動作;此外條件還可以是正則匹配表達時
如:awk '/^a/ ' ##當前行匹配以a開頭成功時則執行後面的列印
上面正則匹配的範圍是整行的內容,如果只想匹配指定欄位的內容,則可以這樣使用:
awk '$n ~ /^1/ ' ##通過~符號規定了正則的匹配操作範圍【這裡是字段n】,~叫做匹配操作符
動作內容:
內容必須放{}大擴弧中,其內就是具體的執行的語句,可以是一句,多句,使用;逗號分割 如:
##普通輸出
##格式化輸出
此外awk的語句還可以使用結構化命令,如分支,迴圈等 如:
if (condition)
else if(condition)
else
while (condition)
for (i=1;i<3;i++)
注:awk的執行是按行號依次迴圈內容的,如果想在所有行執行對awk進行設定並生效的話,那麼就需要使用關鍵字begin
在所有行處理完之後還要做後期處理操作,則可以使用end關鍵字 如:
awk 'begin $1 > 3 end ' ##在執行第一行之前設定分割符為:冒號。
linux的檔案處理工具
檔案檢視命令 cat,nl,tac,rev cat 命令 選項 e 顯示行結束符 n 對顯示出的每一行進行編號 a 顯示所有控制符 b 非空行編號 s 壓縮連續的空行成一行 more 分頁檢視檔案 d 顯示翻頁及退出提示 less 一頁一頁地檢視檔案或stdin輸出 檢視時有用的命令包括 文字 搜尋...
linux日誌分割處理工具logrotate
logrotate 程式是乙個日誌檔案管理工具。用來把舊的日誌檔案刪除,並建立新的日誌檔案,我們把它叫做 轉儲 我們可以根據日誌檔案的大小,也可以根據其天數來轉儲,這個過程一般通過 cron 程式來執行。logrotate 程式還可以用於壓縮日誌檔案,以及傳送日誌到指定的e mail logrota...
linux日誌分割處理工具logrotate
logrotate 程式是乙個日誌檔案管理工具。用來把舊的日誌檔案刪除,並建立新的日誌檔案,我們把它叫做 轉儲 我們可以根據日誌檔案的大小,也可以根據其天數來轉儲,這個過程一般通過 cron 程式來執行。logrotate 程式還可以用於壓縮日誌檔案,以及傳送日誌到指定的e mail logrota...