1.sed是一款流編輯工具,用來對文本進行過濾與替換工作,特別是當你想要對幾十個配置文件做統計修改時,你會感受到sed的魅力!
sed通過輸入讀取文件內容,但一次僅讀取一行內容進行某些指令處理後輸出,所以sed更適合於處理大數據文件。
.sed流程:
* 通過文件或管道讀取文件內容。
* sed並不直接修改源文件,而是將讀入的內容複製到緩衝區中,我們稱之爲模式空間(pattern space)。
* 根據sed的指令對模式空間中的內容進行處理並輸出結果,默認輸出至標準輸出即屏幕上。
輸入
------------------------------------------------
|
|
v
v
讀取一行內容,並複製到模式空間 <------------ sed 指令
|
|
v
v
------------------------------------------------
輸出經過處理後的內容
二、sed基本語法結構
sed Options... [script] [inputfile...]
sed 選項... [腳本指令] [輸入文件]
如果沒有輸入文件,則sed默認對標準輸入進行處理(即鍵盤輸入)。腳本指令是第一個不以“-”開始的參數。
1.選項含義:
--version 顯示sed版本。
--help 顯示幫助文檔。
-n,--quiet,--silent 靜默輸出,默認情況下,sed程序在所有的腳本指令執行完畢後,將自動打印模式空間中的內容,這些選項可以屏蔽自動打印。
-e script 允許多個腳本指令被執行。
-f script-file,
--file=script-file 從文件中讀取腳本指令,對編寫自動腳本程序來說很棒!
-i,--in-place 直接修改源文件,經過腳本指令處理後的內容將被輸出至源文件(源文件被修改)慎用!
-l N, --line-length=N 該選項指定l指令可以輸出的行長度,l指令用於輸出非打印字符。
--posix 禁用GNU sed擴展功能。
-r, --regexp-extended 在腳本指令中使用擴展正則表達式
-s, --separate 默認情況下,sed將把命令行指定的多個文件名作爲一個長的連續的輸入流。GNU sed則允許把他們當作單獨的文件, 這樣如正則表達式則不進行跨文件匹配。
-u, --unbuffered 最低限度的緩存輸入與輸出。
grep "2014-05-29" gpdata.txt
grep "2014-05-*" gpdata.txt
grep "2014-05-*" gpdata.txt | wc -l
列出2014-06月所有上漲的數據
1)打印第一行
grep "2014-06-*" gpdata.txt | awk '{ if($7 > 0) print $1 }'
2)打印第1行和第7行
grep "2014-06-*" gpdata.txt | awk '{ if($7 > 0) print $1, "\t", $7 }'
3)統計共有多少條
grep "2014-06-*" gpdata.txt | awk '{ if($7 > 0) print $1, "\t", $7 }' |wc -l
4)打印符合條件的整行數據 $0
grep "2014-06-*" gpdata.txt | awk '{ if($7 > 0) print $0}'
$0代表整個文本行;
$1代表文本行中的第1個數據字段;
$2代表文本行中的第2個數據字段;
$n代表文本行中的第n個數據字段。
5 顯示上海大盤2014-02月上漲幅度最大的一天
grep "2014-02-*" gpdata.txt | sort -n -k7
grep "2014-02-*" gpdata.txt | sort -n -k7|tail -1
grep "2014-02-*" gpdata.txt | sort -n -k7|tail -2
grep "2014-02-*" gpdata.txt | sort -n -k7|tail -3
grep "2014-02-*" gpdata.txt | sort -n -k7 -r
grep "2014-02-*" gpdata.txt | sort -n -k7 -r | head -1
grep "2014-02-*" gpdata.txt | sort -n -k7 -r | head -2
grep "2014-02-*" gpdata.txt | sort -n -k7 -r | head -3
顯示上海大盤2014-02月份所有上漲數據的時間和上漲的幅度(%)
grep "2014-02-*" gpdata.txt | awk '{ if ($7 > 0) print $1,"\t\t\t\t" $7 }'
7 顯示上海大盤2014-02月份所有上漲數據的時間和上漲的幅度(%),第5條-第10條之間的數據
grep "2014-02-*" gpdata.txt | awk '{ if ($7 > 0) print $1,"\t\t" $7 }' | sed -n "5,10p"
sed命令的常用用法
1、按照一個範圍(第幾行到第幾行),提取數據
2、sed的主要用法是編輯功能,對提取的數據,進行修改、替換、刪除、插入等操作
其中替換必須要會。。
8 列出上海大盤2014-02月份漲跌在1個點和2個點之間的數據
grep "2014-02-*" gpdata.txt | awk '{ if($7 > 0 && $7 < 2) print $1 }'
grep "2014-*" gpdata.txt | awk '{ if($7 > 0 && $7 < 2) print $1,"\t\t", $7 }'
find -name "*.sh" | xargs grep -n "case"
find -name "*.sh" | xargs grep -n "case" | awk -F":" '{ print $1, "\t\t", $2 }'
sed -n 'p' 2.txt
sed -n '3,/ddd/p' 2.txt
sed -n '/^$/=' 2.txt
顯示hello所在的行
sed -n '/hello/=' 2.txt
sed 's/d/D/g' 2.txt
sed -i 's/^M//g' 3.txt>new.txt
文本處理常用技巧總結
find命令:按照文件名,在某一目錄下,查找符合條件的目錄或者文件
find -name "*.sh" ./
grep命令 對文本模式匹配,按照行方式
-v 取反 -n顯示匹配行及行號 -c輸出匹配計數
awk命令 對文本按照列進行處理或打印
sort命令 對文本按照行進行排序處理,默認從小到大
-n按照數字處理 -k7代表第7列 -r逆序
sed命令 按照行或者處理文本
sed -n '1p' -n按照行定爲打印
sed -n '1,3p' 範圍
sed -n '$p' 代表最後一行
sed 文本替換
ipcs | sed -n '/shared/='