Linux三劍客之grep 與 egrep

grep:
Linux上文本處理三劍客
1 grep:文本過濾(模式:pattern)工具; *grep, egrep, fgrep2 sed:stream editor,文本編輯工具;
3 awk:Linux上的實現gawk,文本報告生成器;

grep: Global search REgular expression and Print out the line.

作用:
文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行;
模式:由正則表達式字符及文本字符所編寫的過濾條件;
REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符不表示字符字面意義,而表示控制或通配的功能;
分兩類:
基本正則表達式:BRE
擴展正則表達式:ERE
grep -E, egrep
正則表達式引擎
 1 選項:
 2                             --color=auto: 對匹配到的文本著色顯示;
 3                             -v: 顯示不能夠被pattern匹配到的行;
 4                             -i: 忽略字符大小寫;
 5                             -o: 僅顯示匹配到的字符串;
 6                             -q: 靜默模式,不輸出任何信息;
 7                             -A #:after, 后#行
 8                             -B #: before, 前#行
 9                             -C #:context, 前后各#行
10 
11                             -E:使用ERE;

基本正則表達式元字符:

字符匹配:

.: ?匹配任意單個字符;
[]: 匹配指定范圍內的任意單個字符
[^]:匹配指定范圍外的任意單個字符
[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]
匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數;
*:匹配前面的字符任意次;
例如: grep "x*y"?
abxy
xay
xxxxxxy
貪婪模式
.*:任意長度的任意字符;
\?:匹配其前面的字符0或1次;即前面的可有可無;
\+:匹配其前面的字符至少1次;
\{m\}:匹配前面的字符m次;
\{m,n\}:匹配前面的字符至少m次,至多n次;
\{0,n\}:匹配前面的字符至多n次;
\{m,\}:匹配前面的字符至少m次;
位置錨定:
^:行首錨定;用于模式的最左側;
$:行尾錨定;用于模式的最右側;
^PATTERN$: 用于模式匹配整行;
^$: 空行;
^[[:space:]]*$
\< 或 \b:詞首錨定;用于單詞模式的左側;
\> 或 \b:詞尾錨定;用于單詞模式的右側;
\<PATTERN\>:匹配整個單詞;
分組:
\(\):將一個或多個字符捆綁在一起,當作一個整體進行處理;
\(xy\)*ab
Note: 分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3, ...
\1: 從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符;
\(ab\+\(xy\)*\):
\1: ab\+\(xy\)*
\2: xy
后向引用:引用前面的分組括號中的模式所匹配字符,(而非模式本身)
練習實例
1、顯示/proc/meminfo文件中以大小s開頭的行;(要求:使用兩種方式)
1 # grep '^{s|S}' /proc/meminfo
2 # grep -i '^s'  /proc/meminfo

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

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

3、顯示/etc/passwd文件中ID號最大的用戶的用戶名;

1 # sort -t: -k3 -n /etc/passwd | tail -1 | cut -d: -f1

4、如果用戶root存在,顯示其默認的shell程序;

1 # id root &> /dev/null && grep "^root\>" /etc/passwd | cut -d: -f7

5、找出/etc/passwd中的兩位或三位數;

1 # grep "\<[0-9]\{2,3\}\>" /etc/passwd

6、顯示/etc/rc.d/rc.sysinit文件中,至少以一個空白字符開頭的且后面存非空白字符的行;

1 # grep "^[[:space:]]\+[^[:space:]]" /etc/rc.d/rc.sysinit

7、找出"netstat -tan"命令的結果中以'LISTEN'后跟0、1或多個空白字符結尾的行;

# netstat -tan | grep "LISTEN[[:space:]]*$"

8、添加用戶bash、testbash、basher以及nologin(其shell為/sbin/nologin);而后找出/etc/passwd文件中用戶名同shell名的行;

1 # grep "^\([[:alnum:]]\+\>\).*\1$" /etc/passwd

egrep及擴展的正則表達式

egrep = grep -E

擴展正則表達式的元字符:
字符匹配:
.
[]
[^]
次數匹配:
*
?: 0或1次;
+:1次或多次;
{m}:匹配m次;
{m,n}:至少m,至多n次;
錨定:
^
$
\<, \b
\>, \b
分組:
()
后向引用:\1, \2, ...
或者:
a|b
C|cat: C或cat
練習實例
1、顯示當前系統root、centos或user1用戶的默認shell和UID;
1 # grep -E '^(root|centos|user1)\>' /etc/passwd | cut -d: -f1,3,7

2、找出/etc/rc.d/init.d/functions文件(centos6)中某單詞后面跟一個小括號的行;

# grep -E -o "^[_[:alpha:]]+\(\)" /etc/rc.d/init.d/functions

3、使用echo輸出一絕對路徑,使用egrep取出其基名;

1 # echo "/mnt/sdc" | grep -E -o "[^/]+/?$" | cut -d"/" -f1

?

轉載于:https://www.cnblogs.com/maxtgood/p/6155964.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456739.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456739.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456739.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WSGI直觀形象的了解一下

1. 瀏覽器請求動態頁面過程 2. WSGI 怎么在你剛建立的Web服務器上運行一個Django應用和Flask應用&#xff0c;如何不做任何改變而適應不同的web架構呢&#xff1f; 在以前&#xff0c;選擇 Python web 架構會受制于可用的web服務器&#xff0c;反之亦然。如果架構和服務器可以…

安裝Hbase(分布式)遇到一些問題及解決方法

問題一&#xff1a;安裝完成后在Hbase shell 命令行執行list命令時&#xff0c;爆出如下錯誤&#xff1a; hbase(main):001:0> list TABLE …

安裝MySql卡在Start Service的問題

我的情況&#xff1a;之前在windows下安裝過5.6版本&#xff0c;卸載后&#xff0c;現在安裝5.7版本&#xff0c;然后卡在Start Service這里&#xff0c;log日志沒報任何錯誤&#xff0c;后來經過不斷的嘗試各種網上的辦法終于把問題解決了。 問題的原因就是當初卸載5.6版本時…

學習進度條11

第十三周 日期 星期一 星期二 星期三 星期四 星期五 星期六 所花時間&#xff08;包括上課&#xff09; 19:10-22:20 (編程河北省科技信息通用調查系統) 8:00-10:00 (上課) 18:30-21:00 (Oracle實驗) 14:00-16:30 (編程河北省科技信息通用調查系統) 18:20-22:30 (編…

Python面向切面編程是什么

簡而言之就是裝飾器 https://blog.csdn.net/qq_41856814/article/details/90146293

hibernate實現多變聯合查詢

Hibernate主要支持兩種查詢方式&#xff1a;HQL查詢和Criteria查詢。前者應用較為廣發&#xff0c;后者也只是調用封裝好的接口。 現在有一個問題&#xff0c;就是實現多表連接查詢&#xff0c;且查詢結果集不與任何一個實體類對應&#xff0c;怎么解決呢&#xff1f; 舉個例子…

PyCharm光標變粗的解決辦法

pycharm中光標變粗&#xff0c;如下&#xff1a; 此時變成了改寫模式&#xff0c;只需要按下鍵盤的insert鍵即可 轉載于:https://www.cnblogs.com/uglyliu/p/6159839.html

SparkRDD常用算子實踐(附運行效果圖)

目錄1、簡單算子說明2、復雜算子說明 目錄 SparkRDD算子分為兩類&#xff1a;Transformation與Action. Transformation&#xff1a;即延遲加載數據&#xff0c;Transformation會記錄元數據信息&#xff0c;當計算任務觸發Action時&#xff0c;才會真正開始計算。 Action&am…

six庫是什么

Utilities for writing code that runs on Python 2 and 3”“” 它是一個專門用來兼容 Python 2 和 Python 3 的庫。它解決了諸如 urllib 的部分方法不兼容&#xff0c; str 和 bytes 類型不兼容等“知名”問題。

Kali-linux使用Nessus

Nessus號稱是世界上最流行的漏洞掃描程序&#xff0c;全世界有超過75000個組織在使用它。該工具提供完整的電腦漏洞掃描服務&#xff0c;并隨時更新其漏洞數據庫。Nessus不同于傳統的漏洞掃描軟件&#xff0c;Nessus可同時在本機或遠端上遙控&#xff0c;進行系統的漏洞分析掃描…

HDFS讀寫數據的原理

目錄1 概述2 HDFS寫數據流程3 HDFS讀數據流程 目錄 最近由于要準備面試&#xff0c;就把之前學過的東西好好整理下&#xff0c;權當是復習。 下面說下HDFS讀寫數據的原理。 1 概述 HDFS集群分為兩大角色&#xff1a;NameNode、DataNode NameNode負責管理整個文件系統的元數…

理解列存儲索引

版權聲明&#xff1a;原創作品&#xff0c;謝絕轉載&#xff01;否則將追究法律責任。 優點和使用場景 SQL Server 內存中列存儲索引通過使用基于列的數據存儲和基于列的查詢處理來存儲和管理數據。 列存儲索引適合于主要執行大容量加載和只讀查詢的數據倉庫工作負荷…

Django項目部署到阿里云服務器上無法發送郵件STMP

部署好項目之后發送郵件無法發送&#xff0c;多方查閱之后&#xff0c;解決問題。 阿里云服務器禁用了25端口&#xff0c;導致無法發送郵件。 25端口申請開放的難度很大&#xff0c;直接放棄。 解決&#xff1a; 在 django項目的 settings.py文件中x修改port端口 。

美國誠實簽經驗——IMG全球醫療險,TODO

那么&#xff0c;誠實簽最關鍵的4個要點 是什么呢&#xff1f; 第一&#xff0c;證明你有一定的經濟實力。 可能需要房產、存款等證明&#xff0c;也需要銀行信用卡或借記卡半年流水證明&#xff08;讓人信服的每月進帳和消費能力&#xff09;。 這些是為了證明&#xff0c;你可…

大數據開發初學者學習路線

目錄前言導讀&#xff1a;第一章&#xff1a;初識Hadoop第二章&#xff1a;更高效的WordCount第三章&#xff1a;把別處的數據搞到Hadoop上第四章&#xff1a;把Hadoop上的數據搞到別處去第五章&#xff1a;快一點吧&#xff0c;我的SQL第六章&#xff1a;一夫多妻制第七章&…

Python的虛擬環境配置(pyenv+virtualenv)

一、為什么需要配置虛擬環境 Python 2和Python 3之間存在著較大的差異&#xff0c;并且&#xff0c;由于各種原因導致了Python 2和Python 3的長期共存。在實際工作過程中&#xff0c;我們可能會同時用到Python 2和Python 3&#xff0c;因此&#xff0c;也需要經常在Python 2和P…

安卓屏幕適配問題

屏幕適配是根據屏幕密度&#xff0c;dpi為單位的&#xff0c;而不是分辨率。 手機會根據不同手機的密度&#xff0c;自己去不同資源目錄下去找對應的資源 比如:   每個圖片目錄下的圖片資源都是一樣的&#xff0c;只是大小不一樣   比如drawable-sw800dp-mdpi目錄&#xff…

MapReduce原理全剖析

MapReduce剖析圖 如上圖所示是MR的運行詳細過程 首先mapTask讀文件是通過InputFormat&#xff08;內部是調RecordReader()–&#xff1e;read()&#xff09;來一次讀一行&#xff0c;返回K,V值。&#xff08;默認是TextInputFormat&#xff0c;還可以輸入其他的類型如:音視頻&…

利用selenium webdriver點擊alert提示框

在進行元素定位時常常遇到這樣的alert框&#xff1a; 那么該如何定位并點擊確定或取消按鈕呢&#xff1f;stackoverflow上找到了這個問題的答案。 OK&#xff0c; Show you the code&#xff1a; 1 driver.findElement(By.id("updateButton")).click(); 2 //pop up w…

Log 日志的使用與重要性

開發過程中出現bug是必不可免的&#xff0c;你會怎樣debug&#xff1f;從第1行代碼開始看么&#xff1f;還是有個文件里面記錄著哪里錯了更方便呢&#xff01;&#xff01;&#xff01;log日志 Python中有個logging模塊可以完成相關信息的記錄&#xff0c;在debug時用它往往事…