Linux文本處理三劍客

grep(文本過濾)

  • grep 使用基礎正則表達式匹配
  • egrep 使用擴展正則表達式匹配
  • fgrep 不使用正則表達式匹配,速度最快
[root@stardust ~]# grep -v 排除指定字符串
[root@stardust ~]# grep -i 忽略大小寫匹配
[root@stardust ~]# grep -n 顯示匹配到的行號
[root@stardust ~]# grep -c 顯示匹配行數
[root@stardust ~]# grep -o 僅顯示匹配到的字符串
[root@stardust ~]# grep -q 靜默模式 不輸出任何信息 配合$?使用
[root@stardust ~]# grep -w 精確匹配

[root@stardust ~]# grep -A 顯示匹配行及後面N行
[root@stardust ~]# grep -B 顯示匹配行及前面N行
[root@stardust ~]# grep -C 顯示匹配行及先後N行

[root@stardust ~]# grep -E egrep
[root@stardust ~]# grep -G grep
[root@stardust ~]# grep -F fgrep
[root@stardust ~]# grep -P 使用perl的正則

sed(行編輯器)

sed(Stream Editor)操做文件時,每次從源文件中讀取一行到sed工做的模式空間(pattern space)中,在模式空間中對數據進行操做後,將文本流輸出至屏幕正則表達式

經常使用選項

  • -n 靜默模式,不輸出模式空間中的內容至屏幕
  • -e script 多點編輯功能,在一個sed命令中執行多個編輯操做
  • -f script-file 指定腳本文件
  • -r 支持使用擴展正則表達式
  • -i 修改原文件
    • -i.bak 修改前自動建立備份文件

地址定界

  • 不給地址 對全文進行處理
  • 單個地址
    • number 指定的行
    • /pattern/ 被此模式所能匹配到的每一行
  • 地址範圍
    • num1,num2 從num1到num2之間的行
    • num1,+num2 從num1起到以後的num2行
    • /pat1/,/pat2/ 兩個pattern以前的行
    • num,/pat1/ 從num起到pat區間的行
    • /pat/,~num 匹配行步進num行
  • 步進 ~
    • num1~num2 從num1開始,每隔num2行操做。
    • 1~2 顯示奇數行
    • 0~2 顯示偶數行

編輯命令

  • d 刪除
  • p 顯示模式空間中的內容
  • a 行後追加文本
  • i 行前插入文本
  • c 替換行的文本內容
  • w FILE 把模式空間中匹配到的行保存到指定文件
  • r FILE 把指定文件的文本流讀取到當前文件匹配行的行後vim

  • = 爲模式空間中的行顯示行號編輯器

  • ! 對地址定界取反
  • s/// 查找替換 使用方法同vim中的s///
    • 同vim,默認只替換一行中第一個匹配的內容 區分大小寫
    • i 不區分大小寫
    • g 全局替換 每個匹配的元素都替換
    • p 配合-n使用,只顯示處理過的行
    • w FILE 將處理過的行 保存至指定文件
  • ; 若是在一次執行時包含多個處理命令,須要使用分號分割

高級編輯命令

  • h 把模式空間中的內容覆蓋至保持空間中
  • H 把模式空間中的內容追加至保持空間中
  • g 從保持空間取出數據覆蓋至模式空間
  • G 從保持空間取出內容追加至模式空間
  • x 把模式空間中的內容與保持空間中的內容進行互換
  • n 讀取匹配到的行的下一行至模式空間
  • N 追加匹配到的行的下一行至模式空間
  • d 刪除模式空間中的行
  • D 刪除多行模式空間中的全部行
高級編輯使用示例
sed -n 'n;p' FILE:顯示偶數行
sed '1!G;h;$!d' FILE:逆向顯示文件內容
sed '$!N;$!D' FILE:取出文件後兩行
sed '$!d' FILE:取出文件最後一行
sed 'G' FILE:在每一行後添加一行空白行
sed '/^$/d;G' FILE:把多個空白行合併成一行
sed 'n;d' FILE: 顯示奇數行;
sed -n '1!G;h;$p' FILE: 逆向顯示文件中的每一行


相關文章
相關標籤/搜索