文本處理三劍客之 grep/egrep

来源:https://www.cnblogs.com/flashfish/archive/2019/04/17/10722009.html
-Advertisement-
Play Games

grep:文本過濾工具 支持BRE egrep: 支持ERE fgrep: 不支持正則 作用:根據用戶指定的“模式”,對目標文本逐行進行匹配檢查,列印匹配到的行 模式:由正則表達式字元及文本字元所編寫的過濾條件 [OPTIONS] PATTERN [FILE...] options: -v:顯示不被 ...


  grep:文本過濾工具 支持BRE
  egrep: 支持ERE
  fgrep: 不支持正則

    作用:根據用戶指定的“模式”,對目標文本逐行進行匹配檢查,列印匹配到的行
    模式:由正則表達式字元及文本字元所編寫的過濾條件
        [OPTIONS] PATTERN [FILE...]
    options:

      -v:顯示不被PATTERN匹配的行 排除

# 顯示/etc/passwd文件中不以/bin/bash結尾的行

grep  -v '/bin/bash$' /etc/passwd

 


      -i:忽略字元大小寫
      -n:顯示匹配的行號
      -c:顯示匹配的行數
      -o:僅顯示被匹配的字元串
      -q:靜默模式,不輸出任何信息
      -A #:after,後#行
      -B #:before,前#行
      -C #:context,前後各#行
      -e:實現多個選擇間的邏輯or關係
      -w:整行匹配整個單詞
      -E:使用擴展的正則表達式 相當於egrep  
      -F:使用fgrep,不支持正則表達式 相當於fgrep
      --color:將過濾出內容加上顏色顯示

alias grep='grep --color=auto'
 
[root@centos6 ~ 01:43:05]#grep -i "^s" /proc/meminfo 
SwapCached: 0 kB
SwapTotal: 1535996 kB
SwapFree: 1535996 kB
Shmem: 228 kB
Slab: 88064 kB
SReclaimable: 61960 kB
SUnreclaim: 26104 kB
[root@centos6 ~ 01:43:24]#grep "^[sS]" /proc/meminfo

 

  基本正字表達式BRE:

    字元匹配:
      .:匹配任意單個字元
      []:匹配指定範圍內的任意單個字元
      [^]:匹配指定範圍外的任意單個字元

    以下是元字元:
      [:digit:]:數字
      [:lower:]:小寫字母
      [:upper:]:大寫字母
      [:alpha:]:所有字母
      [:space:]:空白字元
      [:alnum:]:所有字母及數字
      [:punct:]:所有標點符號
      [:graph:]:可列印的非空白字元;
      [:blank:]:水平空白字元(空格和製表符)
      [:cntrl:]:不可列印的控制字元(退格、刪除、警鈴)
      [:pirnt:]:列印字元
      [:xdigit:]:十六進位數字

# 顯示/etc/grub2.cfg文件中,至少一個空白字元開頭的且後面存非空白字元的行
 grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg

# 找出“netstat -ant” 命令的結果中以“listen”後跟0,1或多個空白字元結尾的行

netstat -ant |grep "listen[[:space:]]*$"    # 註意,使用元字元時,字元本身的中括弧外,還需要加一層中括弧

# 添加用戶bash,testbash,basher以及nologin,而且找出/etc/passwd 文件中用戶名同shell名的行
useradd bash
useradd testbash
useradd basher 
useradd -s /sbin/nologin login
grep "^\([[:alnum:]]\+\>\).*\1$" /etc/passwd

# 顯示/var目錄下所有以L開頭,以一個小寫字母結尾,且中間出現至少以為數字的文件或目錄

ls -d /var/L*[0-9]*[[:lower:]]

# 顯示/etc目錄下,以任意一位數字開頭,且以非數字結尾的文件或目錄
ls -d /etc/[0-9]*[^0-9]
ls -d /etc/[[:digit:]]*[^[:digit:]]

# 顯示/etc目錄下,以非字母開頭,後面跟了一個字母及其其他任意長度任意字元的文件或目錄
ls -d /etc/[^[:alpha:]][[:alpha:]]*
 

    次數匹配:

    用在要指定次數的字元後面,用於指定前面的字元要出現的次數

      *:匹配前面的字元任意次
      .*:匹配任意長度的任意字元
      \?:匹配前面的字元0次或1次
      \+:匹配前面的字元至少1次,至多不限
      \{M\}:匹配前面的字元M次
      \{M,\}:匹配前面的字元至少M次,至多不限
      \{M,N\}:匹配前面的字元至少M次,至多N次
    

    位置錨定:
      ^:行首錨定,用於模式的最左側
      $:行尾錨定,用於模式的最右側
      ^$:空白行,連space也不允許出現
      ^[[:space:]]*$:空白行或包含空白字元的行
      \<或\b:詞首錨定,出現在單詞的左側
      \>或\b:詞尾錨定,出現在單詞的右側
      \<PATTERN\>:完整匹配單詞

# 去除nginx.conf裡面的的空行和註釋行

   grep -Ev "^$|#" nginx.conf
  ^$  空行
  |  或者
  #  註釋行開頭字元

 

 

    分組及引用:

      \(\):將一個或多個字元捆綁在一起,當作一個整體進行處理
      

    後向引用:

      引用前面的分組括弧中的模式所匹配的字元

分組括弧中的模式匹配到的內容會被正則表達式引擎記錄與內部的變數中,這些變數的命名
    方式為\1,\2,\3
      \1: 從左側起,第一個左括弧以及與之匹配右括弧之間的模式所匹配的字元
      \(ab\+\(xy\)*\)
      \1: ab\+\(xy\)*\
      \2: xy

  egrep及擴展正則表達式(Extandard RegExp):

    字元匹配:

      .:任意單個字元
      []:指定範圍內的任意單個字元
      [^]:指定範圍外的任意單個字元

    次數匹配:

      *:任意次
      ?:0次或1次
      +:其前一次最少一次或多次
      {m}:匹配其前字元m次
      {m,n}:匹配其前字元最少m次,最多n次

    位置錨定:
      ^:行首錨定,用於模式的最左側
      $:行尾錨定,用於模式的最右側
      ^$:空白行,連space也不允許出現
      \<或\b:詞首錨定,出現在單詞的左側
      \>或\b:詞尾錨定,出現在單詞的右側
   

    分組及引用:

    ():分組;括弧內的模式匹配到的字元會被記錄到正則表達式引擎的內部變數中
    後向引用:\1,\2,\3....
    或:
    | a|b a或者b


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • GAWK:報告生成器,格式化文本輸出 awk [options] ‘program’ var=value file… awk [options] -f programfile var=value file… awk [options] 'BEGIN{ action;… } pattern{ acti ...
  • 參考資料: LVM詳解-駿馬金龍-博客園 How to reduce the size of an LVM partition formatted with xfs filesystem on CentOS7? 駿馬兄的博文會相對深入一點,並且他是基於ext系列文件系統來演示擴容與縮容,而我使用的是 ...
  • 轉載請註明出處。本圖來自北航電腦虛擬化課程ppt. ...
  • 在學習彙編的時候,會需要用到debug調試程式,但是現在win10預設已經移除了這個插件,我們需要手動安裝,下麵就告訴大家如何在win10環境下安裝debug。 1:準備工具 1.1 DOSBox 1.2 debug.exe 2:安裝過程 DOSBox安裝過程:可以在官方網站下載:https://w ...
  • 雲伺服器ESC 部署vsftpd 虛擬用戶 說明:雲伺服器部署和本地伺服器部署一樣,都需要開通指定的相應埠,只不過雲伺服器需要在安全組規則中打開相應的埠允許通過。 環境說明: 對應的用戶對應不同的密碼,對應不同的數據目錄,如下圖: 具體步驟 1) 安裝軟體 2) 創建相應的ftp數據目錄 3) ...
  • LVS
    LVS 概述.V1 LVS LVS lvs是一款開源的負責均衡調度器應用,工作於傳輸層。負責把客戶端請求按調度演算法轉發只後端伺服器集群中的主機進行響應。 LVS組成 LVS組成 ipvsadm:ipvsadm是工作於用戶工作,用戶通過ipvsadm工具定義lvs的工作機制,集群,規則以及演算法。 ip ...
  • sed:文本流編輯器 主要是對文件的快速增刪改查,查詢功能中最常用的是過濾,取行 sed [選項] [sed內置命令字元] [輸入文件] Options: -n:取消預設的sed輸出,常與sed內置命令p連用 -e:直接在命令行界面進行sed動作編輯,多點編輯 -r:使用擴展的正則表達式 -i:直接 ...
  • root@VM-38-204-ubuntu:~# host baidu.com baidu.com has address 220.181.57.216 baidu.com has address 123.125.114.144 baidu.com mail is handled by 15 mx.... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...