Linux —— 查找與替換


Linux —— 查找與替換

文本查找:   

grep, egrep, fgrep
   
    grep:根據基本正則表達式定義的模式搜索文檔,並將符合模式的文本行顯示出來
        注意:搜索時屬於部分搜索,只要某一行有某一部分符合模式,就會被顯示出來
        模式:pattern,文本字符和正則表達式的元字符組合而成的匹配條件
    grep 選項 模式 文件

    選項:
    -i:忽略大小寫

    linlin@ubuntu:~/linlin/test$ cat exp.txt 
    I have a pen
    I like to eat apple
    The HHHHH
    the Hhhhh
    linlin@ubuntu:~/linlin/test$ grep -i hhh exp.txt 
    The HHHHH
    the Hhhhh

 

  --color:高亮顯示
  -v:顯示沒有被模式匹配的行

  linlin@ubuntu:~/linlin/test$ grep -v hhh exp.txt 
  I have a pen
  I like to eat apple
  The HHHHH

 

  -o:只顯示被模式匹配到的字符串

  linlin@ubuntu:~/linlin/test$ grep -o hhh exp.txt 
  hhh

 

  -E:擴展正則表達式,等於 egrep
  -F:使用固定字符串進行匹配,等於 fgrep
  
  egrep:等於 grep -E
  
  fgrep:不支持正則表達式,但搜索速度更快

文本替換   

sed:流編輯器(Stream Editor),以批處理的方式而不是交互的方式來編輯文件
       它是文本處理中非常中的工具,能夠完美的配合正則表達式使用。處理時,把當前處理的行存儲
       在臨時緩沖區中,稱為“模式空間”(pattern space),接着用sed命令處理緩沖區中的內容,處
       理完成后,把緩沖區的內容送往屏幕。接着處理下一行,這樣不斷重復,直到文件末尾。文件內
       容並沒有改變。Sed主要用來自動編輯一個或多個文件;簡化對文件的反復操作;編寫轉換程序等。

  模式空間:在內存中
  
  語法格式:sed [選項] '地址(對哪些行進行處理)命令' FILE(s)

  常用選項:

  -n:靜默模式,不再默認顯示模式空間內的內容
  -i:直接修改原文件
  -e  腳本  -e 腳本……:使用多個腳本
  -f  /文件/to/腳本/:指定一個文件,文件每一行都是腳本(地址,命令)
  -r:使用擴展正則表達式

 

  表示:
  1.地址:起始行,結束行
  例如,1,100
  2.命令:使用正則表達式指定的模式
  3.模式1,模式2  表示第一次被模式1匹配到的行開始到第一次被模式2匹配到的行結束,這中間的所有行
  4.行數,處理指定的行
    $表示最后一行,$-n表示倒數第n+1行
  5.起始行,+n  
  表示從起始行與其開始向后的n行,共n+1行

  命令:

  a\ 在當前行下面插入文本。
  i\ 在當前行上面插入文本。
  c\ 把選定的行改為新的文本。
  d 刪除,刪除選擇的行。
  D 刪除模板塊的第一行。
  s 替換指定字符
  h 拷貝模板塊的內容到內存中的緩沖區。
  H 追加模板塊的內容到內存中的緩沖區。
  g 獲得內存緩沖區的內容,並替代當前模板塊中的文本。
  G 獲得內存緩沖區的內容,並追加到當前模板塊文本的后面。
  l 列表不能打印字符的清單。
  n 讀取下一個輸入行,用下一個命令處理新的行而不是用第一個命令。
  N 追加下一個輸入行到模板塊后面並在二者間嵌入一個新行,改變當前行號碼。
  p 打印模板塊的行。
  P(大寫) 打印模板塊的第一行。
  q 退出Sed。
  b lable 分支到腳本中帶有標記的地方,如果分支不存在則分支到腳本的末尾。
  r file 從file中讀行。
  t label if分支,從最后一行開始,條件一旦滿足或者T,t命令,將導致分支到帶有標號的命令處,或者到腳本的末尾。
  T label 錯誤分支,從最后一行開始,一旦發生錯誤或者T,t命令,將導致分支到帶有標號的命令處,或者到腳本的末尾。
  w file 寫並追加模板塊到file末尾。  
  W file 寫並追加模板塊的第一行到file末尾。  
  ! 表示后面的命令對所有沒有被選定的行發生作用。  
  = 打印當前行號碼。  
  # 把注釋擴展到下一個換行符以前。  

 

  s/模式/字符串/修飾符:查找並替換,將每一行中能被模式匹配到的字符串轉換成指定字符串,默認只替換每一行中第一

  次被模式匹配到的字符串

  修飾符

  g:全局替換
  i:忽略字符大小寫
  s后面的分隔符不一定需要為\,也可以為其他內容,但每個分隔符需要一樣,這樣可以保證對文本內容中含有分隔符字符
  s\\\,s###
  \(\),\1,\2……后向引用
  &:引用模式匹配到的整個串,即表示模式匹配到的內容
  -n選項 與 p命令一起使用,表示只顯示匹配到的行
  root@ubuntu:/home/linlin/linlin/shell# sed -n 's/root/ROOT/pg' /etc/passwd
  ROOT:x:0:0:ROOT:/ROOT:/bin/bash

 

    
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM