Linux之grep及正則表達式

来源:http://www.cnblogs.com/Jeffding/archive/2017/07/24/7230487.html
-Advertisement-
Play Games

grep簡介 grep 是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行列印出來。通常grep有三種版本grep、egrep(等同於grep -E)和fgrep。egrep為擴展的grep,fgrep則為快速grep(固定的字元串來對文本進行搜索,不支持正則表達式的引用但是查詢極為 ...


grep簡介

  grep 是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行列印出來。通常grep有三種版本grep、egrep(等同於grep -E)和fgrep。egrep為擴展的grep,fgrep則為快速grep(固定的字元串來對文本進行搜索,不支持正則表達式的引用但是查詢極為快速)。grep是Linux文本處理三劍客之一。

grep使用方式

  使用方式:grep [OPTIONS] PATTERN [FILE...]

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

  常用選項:

  --color=auto:對匹配到的文本著色後進行高亮顯示;

   -i:忽略字元的大小寫

  -o:僅顯示匹配到的字元串

  -v:顯示不能被模式匹配到的行

  -E:支持使用擴展的正則表達式

  -q:靜默模式,即不輸出任何信息

  -A #:顯示被模式匹配的行及其後#行

  -B #:顯示被模式匹配的行及其前#行

  -C #:顯示被模式匹配的行及其前後各#行

  :使用grep匹配時需使用雙引號引起來(單引號為強引用),防止被系統誤認為參數或者特殊命令而報錯。

擴展grep使用方式

  使用方式:egrep [OPTIONS] PATTERN [FILE...] 

  grep -E [OPTIONS] PATTERN [FILE...]

  -i:忽略字元的大小寫
  -o:僅顯示匹配到的字元串本身
  -v:顯示不被模式匹配到的行
  -q:靜默模式,即不輸出任何信息
  -A #:顯示被模式匹配的行及其後#行
  -B #:顯示被模式匹配的行及其前#行
  -C #:顯示被模式匹配的行及其前後各#行
  -G:支持基本正則表達式

grep正則表達式元字元

  ‘^‘: 錨定行首

  ‘$’: 錨定行尾 

  ‘.‘: 匹配任一一個字元

  ‘*’: 匹配零個或多個先前字元 

  ‘\?‘:匹配其前面的字元0次或者1次;

  ‘\+’:匹配其前面的字元1次或者多次;

  ‘\{m\}‘:匹配其前面的字元m次(\為轉義字元)

  ‘\{m,n\}’:匹配其前面的字元至少m次,至多n次

  ‘[]‘: 匹配一個指定範圍內的字元 | ‘[^]’匹配指定範圍外的任意單個字元

  ‘\<‘或‘\b’:錨定詞首,‘\>’或‘\b’:錨定詞尾(可用\<PATTERN\>:匹配完整單詞)

  ‘\(\)’:將多個字元當做一個整體進行處理

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

  分組括弧中的模式匹配到的內容或被正則表達式引擎自動記錄於內部的變數中:

  \1:模式從左側起,第一個左括弧及與之匹配的右括弧之間模式匹配到的內容

  \2:模式從左側起,第二個左括弧及與之匹配的右括弧之間模式匹配到的內容...

  擴展正則表達式與正則表達式略有不同:

  '[]':依舊匹配指定範圍內的任意單個字元;但是有很多特殊匹配方式。

    [:digit:] 匹配任意單個數字

    [:lower:] 匹配任意單個小寫字母               

    [:upper:] 匹配任意單個大寫字母

    [:alpha:] 匹配任意單個字母

    [:alnum:] 匹配任意單個字母或數字

    [:punct:] 匹配任意單個符號

    [:space:] 匹配單個空格

  一些地方取消了轉義字元的使用:

  ‘?‘:匹配其前面的字元0次或者1次;

  ‘+’:匹配其前面的字元1次或者多次;

  ‘{m}‘:匹配其前面的字元m次(\為轉義字元)

  ‘{m,n}’:匹配其前面的字元至少m次,至多n次

  ():將一個或多個字元捆綁在一起,當做一個整體進行處理,反向引用照常使用。

  ‘|’:或(:‘C|cat’為C與cat,‘(C|c)at才是Cat與cat’)

練習題:

  1、列出當前系統上所有已經登錄的用戶的用戶名,註意:同一個用戶登錄多次,則只顯示一次

[root@localhost ~]# who | cut -d' ' -f1|uniq
root

  2、取出最後登錄到當前系統的用戶的相關信息

[root@localhost ~]# id `last | head -1 | cut -d' ' -f1`
uid=0(root) gid=0(root) groups=0(root)

  3.取出當前系統上被用戶當做其預設shell最多的那個shell

[root@localhost ~]# cut -d':' -f7 /etc/passwd|uniq -c|sort -n|tail -1|cut -d' ' -f7
/sbin/nologin

  4.將/etc/passd中的第三個欄位設置最大的後10個用戶的信息全部改為大寫保存至/tmp/maxuser.txt文件中

[root@localhost ~]# sort -t':' -k3 -n /etc/passwd|tail -10|tr 'a-z' 'A-Z' >/tmp/maxusers.txt
[root@localhost ~]# cat /tmp/maxusers.txt 
NOBODY:X:99:99:NOBODY:/:/SBIN/NOLOGIN
SYSTEMD-NETWORK:X:192:192:SYSTEMD NETWORK MANAGEMENT:/:/SBIN/NOLOGIN
NGINX:X:996:994:NGINX WEB SERVER:/VAR/LIB/NGINX:/SBIN/NOLOGIN
CHRONY:X:997:995::/VAR/LIB/CHRONY:/SBIN/NOLOGIN
POLKITD:X:998:996:USER FOR POLKITD:/:/SBIN/NOLOGIN
SYSTEMD-BUS-PROXY:X:999:997:SYSTEMD BUS PROXY:/:/SBIN/NOLOGIN
DINGJIE:X:1000:1000:DINGJIE:/HOME/DINGJIE:/BIN/BASH
JEFF:X:1001:1024:WOSHIDASHUAIBI:/HOME/JEFF:/BIN/BASH
EGON:X:1002:1002::/HOME/EGON:/BIN/BASH
NFSNOBODY:X:65534:65534:ANONYMOUS NFS USER:/VAR/LIB/NFS:/SBIN/NOLOGIN

  5.取出當前主機的IP地址

[root@localhost ~]# ifconfig | egrep "inet.*broadcast.*"|cut -d' ' -f10
192.168.0.133

  6.列出/etc目錄下所有已.conf結尾的文件的文件名,並將其名字轉換為大寫後保存至/tmp/etc.conf文件中

[root@localhost ~]# find /etc -name '*.conf' | egrep -o "[^/]*(\.conf)$"|tr 'a-z' 'A-Z' >/tmp/etc.conf
[root@localhost ~]# cat /tmp/etc.conf 
RESOLV.CONF
CA-LEGACY.CONF
FASTESTMIRROR.CONF
LANGPACKS.CONF
SYSTEMD.CONF
VERSION-GROUPS.CONF
LVM.CONF
LVMLOCAL.CONF
ASOUND.CONF
LDAP.CONF
MLX4.CONF
RDMA.CONF
SMTPD.CONF

  7.顯示/var目錄下一級子目錄或文件的總數

[root@localhost ~]# ls /var | wc -l
21

  8.取出/etc/group第三個欄位數值最小的10個組的名字

[root@localhost ~]# sort -t: -k3 -n /etc/group|head -10 |cut -d':' -f1
root
bin
daemon
sys
adm
tty
disk
lp
mem
kmem

  9.將/etc/fstab和/etc/issue文件的內容合併為同一個內容後保存至/tmp/etc.test文件中

[root@localhost ~]# cat /etc/fstab /etc/issue > /tmp/etc.test
[root@localhost ~]# cat /tmp/etc.test 

#
# /etc/fstab
# Created by anaconda on Sat May 13 10:12:58 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/cl-root     /                       xfs     defaults        0 0
UUID=2789d01a-4e2b-47a5-9c3c-537641648663 /boot                   xfs     defaults        0 0
/dev/mapper/cl-swap     swap                    swap    defaults        0 0
\S
Kernel \r on an \m

  對於正則表達式的使用需要多聯繫加強記憶,否則是用不好正則表達式的,在學習過程中切記多寫多背。


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

-Advertisement-
Play Games
更多相關文章
  • Jexus 即 Jexus Web Server,簡稱JWS,是Linux平臺上的一款ASP.NET WEB伺服器,是 Linux、Unix、FreeBSD 等非Windows系統架設 ASP.NET WEB 伺服器的核心程式,是企業級ASP.NET跨平臺部署的一種可選方案。與其它WEB伺服器相比, ...
  • gawk 程式是Unix中原始awk程式的GNU版本。gawk程式讓流編輯器邁上了一個新的臺階,它提供了一種編程語言而不只是編輯器命令。在gawk編程語言中,可以完成下麵的事情: (1)定義變數來保存數據; (2)使用算數和字元串操作符來處理數據; (3)使用結構化編程概念(比如if then語句和 ...
  • 本文目錄: 1.6.1 基本整數運算 1.6.2 bc命令高級算術運算 使用let、$(())或$[]進行基本的整數運算,使用bc進行高級的運算,包括小數運算。其中expr命令也能進行整數運算,還能判斷參數是否為整數,具體用法見expr命令全解。 1.6.1 基本整數運算 [root@xuexi t ...
  • 在一開始使用Ubuntu時還是滿興奮的,但是在多次登錄系統後發現Ubuntu有自己設置的帳號和密碼之外,還有一個“客人登錄”。細心的人就會發現客人登錄是不需要帳號和密碼的,直接點擊就能登錄。雖然說客人登錄退出後會刪除所有設置和操作,但我還是不放心。我在網上找了一些方法,終於被我找到一個比較合適的了。 ...
  • expr命令可以實現數值運算、數值或字元串比較、字元串匹配、字元串提取、字元串長度計算等功能。它還具有幾個特殊功能,判斷變數或參數是否為整數、是否為空、是否為0等。 先看expr命令的info文檔info coreutils 'expr invocation'的翻譯。 下麵將使用示例來介紹expr的 ...
  • 原文發表於cu:2016-03-11 參考文檔: 一.環境 OS CentOS6.7 x86_64 網路 Sever:192.168.1.254 Client:192.168.1.100 二.安裝與配置 1. 安裝 使用yum安裝即可:yum install vsftpd -y 2. 軟體模塊 3. ...
  • sed編輯器被稱作流編輯器(stream editor),和普通的互動式文本編輯器恰好相反。在互動式文本編輯器中(比如vim),你可以用鍵盤命令來互動式的插入、刪除或者替換數據中的文本。流編輯器則會自愛編輯器處理數據之前基於預習提供的一組規則來編輯數據流。 sed編輯器可以根據命令來處理數據流中的數 ...
  • 大話命令之—ss ss是Socket Statistics的縮寫。顧名思義,ss命令可以用來獲取socket統計信息,它可以顯示和netstat類似的內容。 優勢: (1)顯示更多更詳細的有關TCP和連接狀態的信息,(2)比netstat更快速更高效。 1 格式 格式:ss [option]… [f ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...