shell腳本編程中sed、awk、grep命令詳解

引言

grep、sed和awk都是文本處理工具,雖然都是文本處理工具單卻都有各自的優缺點。在接下來的內容中,將會詳細介紹三種命令的使用。

  • grep:grep (global search regular expression(RE) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。文本過濾器,如果僅僅是過濾文本,可使用grep,其效率比其他的高很多。(過濾文本)

  • sed:可以按行處理數據

  • awk:報告生成器,格式化以後顯示。如果對處理的數據需要生成報告之類的信息,或者你處理的數據是按列進行處理的,最好使用awk。(處理列)

awk命令使用

AWK是一種處理文本文件的語言,是一個強大的文本分析工具。
之所以叫AWK是因爲其取了三位創始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

  • awk使用標準格式
awk 選項參數 '{pattern + action}' {filenames}
選項參數 含義
-F fs or --field-separator fs 指定輸入文件折分隔符,fs是一個字符串或者是一個正則表達式,如-F:。
-v var=value or --asign var=value 賦值一個用戶定義變量。
-f scripfile or --file scriptfile 從腳本文件中讀取awk命令。
-mf nnn and -mr nnn 對nnn值設置內在限制,-mf選項限制分配給nnn的最大塊數目;-mr選項限制記錄的最大數目。這兩個功能是Bell實驗室版awk的擴展功能,在標準awk中不適用。
  • 示例1
    源文件如下
    在這裏插入圖片描述
    取出文件某一列
    在這裏插入圖片描述
  • 示例2
    格式化輸出
    在這裏插入圖片描述
  • 示例3

使用正則取出含有字母e的第一列以及第二列

在這裏插入圖片描述

  • 示例4
    awk內部使用if語句
    在這裏插入圖片描述
  • 示例5
    awk中使用循環
    在這裏插入圖片描述

awk具有豐富的內置變量可以使用

參數 描述
ARGC 命令行參數個數
ARGV 命令行參數排列
ENVIRON 支持隊列中系統環境變量的使用
FILENAME awk瀏覽的文件名
FNR 瀏覽文件的記錄數
FS 設置輸入域分隔符,等價於命令行 -F選項
NF 瀏覽記錄的域的個數
NR 已讀的記錄數
OFS 輸出域分隔符
ORS 輸出記錄分隔符
RS 控制記錄分隔符

grep使用

grep可以用於搜索文件中特定模式的子串
命令的標準使用格式爲

grep [option] "string_to_find" filename

其中option中的常用的命令爲

命令 含義
-i 忽略搜索字符串的大小寫
-v 取反,即輸出不匹配的那些文本行
-n 輸出行號
-l 輸出能夠匹配模式的文件名,相反的選項爲-L
-q 靜默輸出
  • 示例1
    搜索以we開頭的行
grep "^we" test0.txt

運行結果爲(其中^表示開頭)
在這裏插入圖片描述

  • 示例2
    搜索不以we開頭的字符串
grep -v "^we" test0.txt

在這裏插入圖片描述

  • 示例3
    統計匹配成功的行數
    在這裏插入圖片描述
  • 示例4
    匹配 以we開頭的行,並顯示行號
    在這裏插入圖片描述
  • 示例5
    統計匹配成功的次數

    其中源文件爲
    在這裏插入圖片描述

sed使用

sed 【options】  ‘【command】’ 【filename】

其中options:

命令 含義
-n 抑制自動(默認的)輸出 讀取下一個輸入行,-n要讀取的行號
-e 執行多個sed命令
-f 運行腳本
-i 編輯文件內容
-i.bak 編輯的同時創造.bak的備份
-r 使用擴展的正則表達式

其中command

命令 含義
a 在匹配後追加
i 在匹配後插入
p 打印
d 刪除
r/R 讀取文件/一行
w 另存
s 查找
c 替換
y 替換
h/H 複製拷貝/追加模式空間(緩衝區)到存放空間
g/G 粘貼 從存放空間取回/追加到模式空間
x 兩個空間內容的交換
n/N 拷貝/追加下一行內容到當前
D 刪除\n之前的內容
P 打印\n之前的內容
b 無條件跳轉
t 滿足匹配後的跳轉
T 不滿足匹配時跳轉
  • 示例1
    我對文件name.txt操作
    源文件內容如下所示
    在這裏插入圖片描述
    對源文件中的23替換爲00
root@1032:~/shell/dirfor$ sed  -i 's/23/000/g' name.txt

修改之後結果爲
在這裏插入圖片描述

  • 示例2
    在文件的行首添加id
root@1032:~/shell/dirfor$ sed -i  's/^/&id /g' name.txt

其中s表示在全文檔中尋找,^表示行首位置,代碼運行結果爲
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章