Linux基礎命令---顯示文本grep

来源:https://www.cnblogs.com/wj78080458/archive/2018/12/27/10176128.html
-Advertisement-
Play Games

grep 按照指定的模式,在文件中搜索匹配的行,將結果顯示在標準輸出。另外還有兩個指令egrep相當於grep –E,fgrep相當於grep -F。如果沒有給出文件名,那麼從標準輸入讀取。 此命令的適用範圍:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedor ...


grep

      按照指定的模式,在文件中搜索匹配的行,將結果顯示在標準輸出。另外還有兩個指令egrep相當於grep –E,fgrep相當於grep -F。如果沒有給出文件名,那麼從標準輸入讀取。

     此命令的適用範圍:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

 

1、語法

     grep [選項]  PATTERN files

     grep [OPTIONS]  [-e PATTERN | -f FILE]  [FILE...]

 

2、選項列表

選項

說明

-V | --version

顯示命令版本信息

--help

顯示幫助文檔

匹配選擇

 

-E | --extended-regexp

使用擴展規則表達式解釋匹配模式

-F | --fixed-strings

將匹配模式看做固定字元串

-G | --basic-regexp

使用基本規則表達式解釋匹配模式

-P | --perl-regexp

使用perl表達式解釋匹配模式

文件和目錄選擇控制

 

-a | --text

忽略二進位數據

--binary-files=TYPE

如果文件的前幾個位元組表示該文件包含二進位數據,則假定該文件類型是TYPE。預設情況下,TYPE為二進位,grep通常輸出一行消息表示二進位文件匹配,如果沒有匹配則不輸出消息。如果類型不匹配,grep假定二進位文件不匹配;這相當於-i選項。如果TYPE是文本,grep會像處理文本一樣處理二進位文件;這相當於-a選項。警告:“grep-binary-files=text”可能會輸出二進位垃圾,如果輸出是終端,並且終端驅動程式將其中的一些解釋為命令,則會產生嚴重的副作用。

-D action | --devices=ACTION

如果輸入文件是一個設備文件,那麼用指定的action處理。read,像普通文件一樣讀取設備,skip,忽略設備

-d action | --directories=ACTION

如果查找的是目錄文件,那麼使用指定的操作處理。read,像普通文件一樣讀取目錄;skip,忽略目錄;recursive,遞歸當時讀取子目錄下文件。

--exclude=per

忽略文件名匹配per的文件       

--exclude-from=FILE

跳過其基本名稱與從FILE中讀取的任何文件名全局匹配的文件。

--exclude-dir=DIR

從遞歸搜索中排除匹配模式DIR的目錄

-I

處理二進位文件,就像它不包含匹配的數據一樣;等價於“--binary-files=without-match”

--include=GLOB

只搜索其基本名稱與GLOB匹配的文件

-R | -r | --recursive

遞歸方式讀取目錄下所有文件

行數控制

 

-A num | --after-context=NUM

顯示匹配行以及之後指定的行數

-B num | --before-context=NUM

顯示匹配行以及之前指定的行數

-C num | -NUM | --context=NUM

顯示匹配行以及之前和之後的指定行數

輸出行控制

 

-b | --byte-offset

在顯示匹配的行之前,列印該行第一個字元的偏移位置

-H | --with-filename

為每個匹配的行顯示文件名,如果有多個文件的話,這是預設操作

-h | --no-filename

顯示匹配的行,但是不顯示文件名。如果搜索一個文件時,這是預設操作

-n | --line-number

顯示匹配的行之前,顯示行號

-T | --initial-tab

確保實際行內容的第一個字元位於製表符停止上,使製表符的對齊看起來正常。

-u | --unix-byte-offsets

報告Unix樣式的位元組偏移量。此開關使grep報告位元組偏移量,就像文件是Unix樣式的文本文件一樣

-Z | --null

輸出一個零位元組(ASCII null字元),而不是通常跟隨文件名的字元。例如,“grep –lz”在每個文件名之後輸出一個零位元組,而不是通常的換行符。

輸出控制

 

-c | --count

統計符合匹配的行數

--color[=WHEN] |  --colour[=WHEN]

用轉義序列包圍匹配(非空)字元串、匹配行、上下文行、文件名、行號、位元組偏移量和分隔符(用於欄位和上下文行組),以便在終端上顯示它們的顏色。顏色由環境變數grep_colors定義。仍然支持不推薦的環境變數grep_color,但它的設置沒有優先順序。WHEN的有效值是never,always,auto。

-L | --files-without-match

禁止正常輸出;而是列印通常不會輸出的每個輸入文件的名稱。掃描將在第一次匹配的時候停止。

-l

顯示內容符合指定匹配模式的文件名

-m num  |  --max-count=NUM

在匹配num行之後,停止搜索

-o | --only-matching

只顯示匹配行的匹配字元

-q | --quite

靜默模式,搜索完成之後返回0

-s | --no-messages

不顯示文件不存在和文件不可讀的錯誤信息

模式控制

 

-e parttern  |  --regexp=PATTERN

設置匹配模式

-f file  | --file=FILE

將給定的文件內容作為匹配模式

-i  |  --ignore-case

忽略大小寫

-v | --invert-match

顯示不符合匹配模式的行

-w | --word-regexp

顯示整個字都匹配的行

-x | --line-regexp

顯示整行都匹配的行

其他選項

 

--line-buffered

對輸出使用行緩衝。這會導致性能損失。

--mmap

如果可能,使用mmap(2)系統調用來讀取輸入,而不是預設的read(2)系統調用。在某些情況下,mmap會產生更好的性能。但是,-mmap可能導致未定義的行為(包括核心轉儲),如果一個輸入文件在grep運行時收縮,或者如果發生I/O錯誤。

-U | --binary

將文件視為二進位文件。

-z | --null-data

將輸入視為一組行,每一行以零位元組(ASCII NUL字元)結尾,而不是換行符。

 

3、環境變數

     grep的行為受到以下環境變數的影響。

     GREP_OPTIONS,此變數指定放置在任何顯式選項前面的預設選項。選項規範由空格分隔。反斜杠轉義下一個字元,因此它可以指定包含空格或反斜杠的選項。例如,如果GREP_OPTIONS是’--binary-files=without-match --directories=skip’,那麼grep執行的時候就假設已經有了這兩個選項。

     GREP_COLOR,此變數指定用於突出顯示匹配(非空)文本的顏色。

     GREP_COLORS,指定用於突出顯示輸出的各個部分的顏色和其他屬性。它的值是一個以冒號分隔的功能列表,預設為ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36,省略了rv和ne布爾功能(即false)。支持的功能如下所示。

          sl=,用於整個選定行的SGR子字元串(即-v命令行選項省略時的匹配行,或指定-v時不匹配的行)。但是,如果指定了布爾rv功能和-v命令行選項,則它將應用於上下文匹配行。預設值為空(即終端的預設顏色對)。

          cx=,用於整個上下文行的SGR子字元串(即省略-v命令行選項時的非匹配行,或指定-v時的匹配行)。但是,如果指定了布爾RV功能和-v命令行選項,則它將適用於選定的非匹配行。預設值為空(即終端的預設顏色對)。

          rv,當指定-v命令行選項時,逆轉(掉期)“sl=”和“cx=”功能的布爾值。預設值為false(即省略了功能)。

          mt=01;31,用於匹配任何行中的非空文本的sgr子字元串。(這僅在省略-v命令行選項時使用。)當啟動時,sl=(或cx=)能力的效果保持活躍。預設值是當前行背景上的粗體紅色文本前景。

          ms=01;31,用於匹配選定行中的非空文本的sgr子字元串。(這僅在省略-v命令行選項時使用。)當啟動時,sl=(或cx=)能力的效果保持活躍。預設值是當前行背景上的粗體紅色文本前景。

          mc=01;31,用於匹配上下文行中的非空文本的sgr子字元串。(這僅在省略-v命令行選項時使用。)當啟動時,sl=(或cx=)能力的效果保持活躍。預設值是當前行背景上的粗體紅色文本前景。

          fn=35,用於任何內容行首碼的文件名的SGR子字元串。預設值是終端預設背景上的洋紅色文本前景。

          ln=32,任何內容行首碼的行號的SGR子字元串。預設值是終端預設背景上的綠色文本前景。

          bn=32,用於任何內容行首碼的位元組偏移的SGR子字元串。預設值是終端預設背景上的綠色文本前景。

          se=36,當指定了非零上下文(--),SGR子字元串用於在選定的行欄位(:)、上下文行欄位之間(-)和相鄰行組之間插入分隔符。預設值是終端預設背景上的青色文本前景。

          ne,布爾值,該值防止在每次彩色項結束時使用擦除入行(EL)對右(\33[K]清除到行尾的值。這是在不支持EL的終端上需要的。對於沒有應用Back_COLOR_ERASE(BCE)布爾終止功能的終端、所選擇的高亮顏色不影響背景、或者當EL太慢或導致過多閃爍時,它在其他情況下是有用的。預設值為false(即省略功能)

     LC_ALL, LC_COLLATE, LANG,這些變數指定LC_COLLATE類別的區域設置,該類別確定用於解釋範圍表達式(如[a-z])的排序序列。

     LC_ALL, LC_CTYPE, LANG,這些變數指定LC_CTYPE類別的區域設置,它決定字元的類型,例如,哪些字元是空格。

     LC_ALL, LC_MESSAGES, LANG,這些變數指定LC_MESSAGES類別的區域設置,它確定grep用於消息的語言。預設的C語言環境使用美式英語消息。

     POSIXLY_CORRECT,如果設置,grep的行為與POSIX.2所要求的一樣;否則,grep的行為更像其他GNU程式。POSIX.2要求必須將文件名後面的選項視為文件名;預設情況下,這些選項被排到操作數列表的前面,並被視為選項。此外,POSIX.2還要求將未被承認的選項診斷為“非法”,但由於它們並不真正違反法律,預設情況是將它們診斷為“無效”。POSIXLY_RIDER還禁用_N_GNU_NOOPTION_ARGV_LANGS_,如下所述。

     _N_GNU_nonoption_argv_flags_,(這裡N是grep的數字進程ID。)如果此環境變數值的ith字元為1,則不要將grep的ith操作數視為選項,即使它似乎是選項之一。shell可以為其運行的每個命令在環境中放置此變數,指定哪些操作數是文件名通配符展開的結果,因此不應被視為選項。此行為僅在GNU C庫中可用,且僅在未設置POSIXLY_RIDER時才可用。

 

4、退出碼

     通常,如果找到選定的行,則退出狀態為0,否則為1。但是,如果發生錯誤,退出狀態為2,除非使用-q、--quite、--slient選項,並找到選定的行。但是,請註意,對於grep、CMP和diff等程式,POSIX只要求在出現錯誤時的退出狀態大於1;因此,出於可移植性的考慮,建議使用對此一般條件進行測試的邏輯,而不是與2嚴格相等的邏輯。

 

5、實例

     1)顯示文件中以2開頭的行

[root@localhost weijie]# cat 2.c

123

23

212

[root@localhost weijie]# grep ^2 2.c         //顯示以2開頭的行

23

212

     2)顯示不包含23的行 

[root@localhost weijie]# grep -v 23 2.c

212

     3)顯示整個字都匹配的行 

[root@localhost weijie]# grep -w 23 2.c

23


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

-Advertisement-
Play Games
更多相關文章
  • 第一次整理了下關於autofac的一些具體的用法 1. 安裝 Autofac: Install-Package Autofac -Version 4.8.1 2. 創建兩個類庫項目,IService (用於編寫介面),ServiceImpl(用於創建實現類) IService 下 public in ...
  • 一、前言 在上一篇的文章中,主要是搭建了我們的開發環境,同時創建了我們的項目模板框架。在整個前後端分離的項目中,後端的 API 介面至關重要,它是前端與後端之間進行溝通的媒介,如何構建一個 “好用” 的 API 介面,是需要我們後端人員好好思考的。 在系統迭代的整個過程中,不可避免的會添加新的資源, ...
  • ...
  • 一、什麼是c#中的異常? 異常是程式運行中發生的錯誤,異常處理是程式的一部分。c#中的異常類主要是直接或者間接的派生於 System.Exception類 ,也就是說System.Exception類是所有預定義的系統異常的基類。錯誤的出現並不總是編寫應用的程式員的原因,有的時候應用程式也會因為終端 ...
  • 這裡只有操作步驟! 第一、查看IIS是否安裝了 AspNetCoreModule,查看路徑:IIS-》模塊 查看 安裝步驟 下載網址:https://www.microsoft.com/net/download/windows 下載完以後點擊安裝,安裝完成以後重啟電腦 第二、.net Core Mv ...
  • 在上一篇博文《 "[UWP]如何實現UWP平臺最佳圖片裁剪控制項" 》中我講解了編寫ImageCropper控制項的過程及知識分享。在那篇文章里,我大言不慚的稱其為UWP平臺最佳圖片裁剪控制項(主要是沒有別的類似控制項來充當對手
  • 感謝Jeffcky大佬的博客: EntityFramework Core 2.0全局過濾 (HasQueryFilter) https://www.cnblogs.com/CreateMyself/p/8491058.html 什麼是值對象 沒有唯一的標識,固定不變的,表示一個具體的概念,用來描述一 ...
  • 一 Docker volume形態 因為Docker 採用 AFUS 分層文件系統時,文件系統的改動都是發生在最上面的容器層,在容器的生命周期內,它是持續的,包括容器在被停止後。但是,當容器被刪除後,該數據層也隨之被刪除了。因此,Docker 採用 volume (捲)的形式來向容器提供持久化存儲。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...