天天看點

Linux正規表達式sed、awk

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的替換很像?)
Linux正規表達式sed、awk

在檔案中添加第三行,内容為hello

sed -e '2a hello world' sed.test

Linux正規表達式sed、awk

删除行,删除2到3行

cat -n sed.test | sed -e '2,3d'

Linux正規表達式sed、awk

删除包含22222的行

cat sed.test | sed '/22222/d'

Linux正規表達式sed、awk

替換行

将1-2行替換為hahaha

cat -n sed.test | sed '1,2c hahaha'

Linux正規表達式sed、awk

查找并替換字元串

 将示例文本的中Hello換成Haha

sed 's\hello\haha\g' sed.test

Linux正規表達式sed、awk

前面的一系列操作,隻是在螢幕上按要求輸出了内容,而檔案本身并沒有改變

sed也可以用于檔案自身的修改。但這樣操作非常危險,有可能誤操作将檔案改壞,是以我們要在有充足把握的情況下才能這樣使用

結合-i和查找替換即可修改檔案,上例中加-i即可

Linux正規表達式sed、awk

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}'

Linux正規表達式sed、awk

比對某段字元

cat /etc/passwd | awk -F : '$1 ~ /oo/'

Linux正規表達式sed、awk

顯示/etc/passwd的前五行,顯示每行的行号、列數,以及該行完整的内容

head -n5 /etc/passwd | awk -F : '{print NR " " NF " " $0}'

Linux正規表達式sed、awk

 條件操作比對

cat /etc/passwd | awk -F : '$3=="0"'

Linux正規表達式sed、awk

 這裡操作符号可以用==、>.>= .< . <=. != 都是可行

和數字比較時,将數字要用雙引号“”引起來,表示字元串,不加引号則表示數字

cat /etc/passwd | awk -F: "$3>="1000""

繼續閱讀