sed介紹
Sed是一個流處理編輯器,它能幫助我們自動處理檔案、分析日志檔案、修改配置檔案等。
Stream Editor文本流編輯,sed是一個“非互動式的”面向字元流的編輯器。能同時處理多個檔案
多行的内容
- 可以不對原檔案改動,把整個檔案輸出到螢幕
- 可以把比對到的内容輸出到螢幕上
- 還可以對原檔案改動,但是不會再螢幕上傳回結果
sed 參數
sed [-hnV] [-e<script>] [-f<script檔案>] [文本檔案]
- -e <script>或--expression=<script>以選項中指定的script來處理輸入的文本檔案。
- -f<script檔案>或--file=<script檔案>以選項中指定的script檔案來處理輸入的文本檔案。
- -h或--help 顯示幫助。
- -n或--quiet或--silent僅顯示script處理後的結果。
- -V或--version顯示版本資訊。
sed 動作
可以了解為操作
- a : 新增,a的後面可以接字串,新增字元串會在目前的下一行
- c∶取代,c的後面可以接字串,這些字串可以取代n1,n2之間的行
- d : 删除,因為是删除,是以d通常寫在最後
- i : 插入,i的後面可以接字串,新增字串會在目前的上一行
- p : 列印,将某個選擇的資料顯示出。通常p會與參數sed -n一起運作
- s : 替換,可以直接進行替換。通常這個s 的動作可以搭配正則表示。例如1,20s/old/new/g(是不是和vim的替換很像?)
在檔案中添加第三行,内容為hello
sed -e '2a hello world' sed.test
删除行,删除2到3行
cat -n sed.test | sed -e '2,3d'
删除包含22222的行
cat sed.test | sed '/22222/d'
替換行
将1-2行替換為hahaha
cat -n sed.test | sed '1,2c hahaha'
查找并替換字元串
将示例文本的中Hello換成Haha
sed 's\hello\haha\g' sed.test
前面的一系列操作,隻是在螢幕上按要求輸出了内容,而檔案本身并沒有改變
sed也可以用于檔案自身的修改。但這樣操作非常危險,有可能誤操作将檔案改壞,是以我們要在有充足把握的情況下才能這樣使用
結合-i和查找替換即可修改檔案,上例中加-i即可
awk
awk是一種程式設計語言,用于在linux/unix下對文本和資料進行處理。它支援使用者自定義函數和動态正
則表達式等功能,是linux/unix下的一個強大程式設計工具。awk命名來自于三位創始人Alfred Aho,
Peter Weinberger,和BrianKernighan的Family Name的首字元。
awk格式
指令行格式:
awk [選項參數] 'script var=value file(s)
awk 内嵌參數
内置變量1:
$0:表示整個目前行
$1:每行第一個字段
内置變量2:
NR:每行的記錄号,行号
NF:字段數量變量,字段總數
FILENAME:正在處理的檔案名
分割,顯示/etc/passwd的第一列,即使用者名
cat /etc/passwd | awk -F : '{print $1}'
比對某段字元
cat /etc/passwd | awk -F : '$1 ~ /oo/'
顯示/etc/passwd的前五行,顯示每行的行号、列數,以及該行完整的内容
head -n5 /etc/passwd | awk -F : '{print NR " " NF " " $0}'
條件操作比對
cat /etc/passwd | awk -F : '$3=="0"'
這裡操作符号可以用==、>.>= .< . <=. != 都是可行
和數字比較時,将數字要用雙引号“”引起來,表示字元串,不加引号則表示數字
cat /etc/passwd | awk -F: "$3>="1000""