linux文本處理指令

相比於vim, sed和awk指令能夠處理及其巨大的文件而不會發生崩潰的狀況正則表達式

 

sed指令,行處理

sed 【選項】  '[n1 [,n2]] 行爲'  【文件】
sed 【選項】  '/pattern/ 行爲'  【文件】  #對正則匹配的行執行操做
sed 【選項】  'n1,+N 行爲'  【文件】  #對n1行及其後的N行執行操做
sed 【選項】  -e '[n1 [,n2]] 行爲' -e '[n1 [,n2]] 行爲'  【文件】   #執行多個操做


選項:
-n  安靜模式。只顯示sed操做打印出的行(默認是顯示 sed操做後結果文件的全部行 + sed操做打印出的行)。
-e  動做表達式,默認
-f  文件指定動做表達式
-r  使用擴展正則
-i  直接寫入源文件,不輸出屏幕

n1,n2  指定做用行號
每一個操做都必須用單引號括起

行爲:
a [字符串]  追加到下行
i [字符串]  插入到上行
c [字符串]  替換行
d          刪除行
p          打印行
s          替換

例子(如下示例只是打印結果, 若要寫入文件則加 -i 選項):
sed '3,$d' filename  #刪除3行至最後
sed '/patern/d' filename  #刪除正則匹配patern行
sed '/patern1/,/patern2/s/aa/bb/' filename  #patern1匹配行至patern2匹配行間作aa->bb替換
sed '3a *** ###' filename  #3行後追加一行*** ###
sed '3a *** \
@@@'  #追加兩行字符,必須 \ 結尾

sed '3,$c ***' filename  #替換3行至最後爲***
sed -n '3,5p' filename  #打印第三行至第五行, -n選項必選
sed 'n1,n2s/from/to/g' filename  #指定行內查找替換, 沒有指定行則全文替換

 

awk指令,列處理

awk 'pattern1 {動做1}  pattern2 {動做2} ...' filename    #當前行知足pattern條件則執行動做


pattern:
連續條件 pattern_a, pattern_b
邏輯運算 || && !
比較運算 >  <  >=  <=  ==  !=
BEGIN  讀取行以前
END    讀取行結束後
/reg/  正則表達式


內置變量:
NF  #當前行的字段數
NR  #當前是第幾行
FS  #當前的分隔符,默認爲 空格符 或 製表符

$0             #當前整行數據
$1, $2, ...    #第一,二 ... 字段


注意:
整個操做必須單引號括起
打印字符串值必須雙引號括起
動做內的多個子動做可用;或者ENTER分離


例子:
awk '{print $1 "\t" $3 "\t line:" NR}' file  #打印1,3列及行號
awk 'BEGIN {FS=":"}  $3<10 {print $1}'  #初始化:爲分隔符。若當前行第三列小於10則打印第一列
awk 'NR>=1 {out=$1+$3;printf "%10d %10d %10d \n",$1,$3,out}' #第一行後,打印第1、三列及求和值

 

diff指令,文件比較

 

diff 行比較指令vim

diff 【選項】 oldfile newfile

選項:
-i  #大小寫不敏感
-b  #忽略不一樣數目空白符的區別
-B  #忽略空白行的區別


##比較兩個目錄包含文件差別
diff 目錄a 目錄b

 

vimdiff 指令較diff更直觀spa

vimdiff oldfile newfile

 

cmp 字節比較指令code

##顯示第一處不一樣字節
cmp file1 file

 

patch指令,文件補丁

 

製做補丁遞歸

diff -Naur oldfile newfile > patchfile
diff -Naur olddir  newdir  > patchfile

-N  缺失文件認定爲空文件
-a  使用文本文件格式
-u  使用合併格式的diff
-r  遞歸

 

打補丁字符串

單個文件打補丁:
patch  【oldfile 【patchfile】】

目錄打補丁:
進入舊目錄所在的同級目錄
patch -Np0 < patchfile
-N  明確指明爲應用補丁
-p0  忽略0個層次的搜索路徑, 由於已在舊目錄同級目錄。
-pN  表示當前目錄下, 須要忽略補丁文件裏目標文件路徑信息的頭N層,再進行當前目錄下對目標文件的搜索

 

新文件補丁還原爲舊文件awk

單個文件還原補丁:
patch -R 【patched_oldfile 【patchfile】】

目錄還原補丁:
進入新目錄所在的同級目錄
patch -Rp0 < patchfile
-R  明確指定爲還原補丁
-p0  忽略0個層次的搜索路徑, 由於已在舊目錄同級目錄
相關文章
相關標籤/搜索