最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

shell正則表達式、grep命令和sed命令舉例詳解

 更新時間:2024年02月19日 10:32:42   作者:小蜜蜂~嗡嗡嗡~  
正則表達式就是用于描述這些規(guī)則的工具,換句話說正則表達式就是記錄文本規(guī)則的代碼,這篇文章主要給大家介紹了關于shell正則表達式、grep命令和sed命令的相關資料,需要的朋友可以參考下

一.正則表達式概述

1.正則表達式定義

1.1 定義

  • 使用字符串描述、匹配一系列符合某個規(guī)則的字符串

1.2 了解

  • 普通字符: 大小寫字母、數(shù)字、標點符號及一些其它符號
  • 元字符: 在正則表達式中具有特殊意義的專用字符

1.3 層次分類

  • 基礎正則表達式
  • 擴展正則表達式
  • 編程語言支持的高級正則表達式

1.4 linux三劍客(grep  sed  awk)支持的正則表達式

  • shell是不支持正則表達式的(shell支持的是通配符)。shell中的正則表達式只有個別命令支持的,一般常用的是Linux三劍客
支持正則的shell命令正則類型
grep默認使用基本正則表達式(BRE)(要使用擴展正則需要加轉(zhuǎn)義字符)
egrep 或 grep -E使用擴展的正則表達式(ERE)
sed默認使用基本正則表達式(BRE)
awk使用擴展正則表達式(ERE)

2.基礎正則表達式的元字符

基礎正則表達式是常用的正則表達式部分

\表示轉(zhuǎn)義字符,去掉特殊符號的特殊含義
.匹配任意單個字符
^匹配字符串開頭的位置
$匹配字符串末尾的位置
*匹配前面的字符出現(xiàn)0~+∞
[list]匹配list列表中的一個字符(列表中只要有一個符合即可)
[^list]匹配任意非list列表中的一個字符
{n}匹配前面的子表達式n次
{n,}匹配前面的子表達式最少n次
{,n}匹配前面的子表達式最多n次
{n,m}匹配前面的子表達式n到m次
[ ]代表單個字符
\?1次或0次
^$空行
.*1~+∞

2.1 轉(zhuǎn)義字符的運用

2.1.1 將特殊含義的字符轉(zhuǎn)換為普通字符的含義

被轉(zhuǎn)義的特殊字符轉(zhuǎn)義前的含義作用
\ =具有賦值的作用,或則進行字符判斷
\ !取反
\ &單個&符可以將命令掛在后臺上,兩個是邏輯符號且的作用
\ $取值變量的作用

2.1.2 將普通字符轉(zhuǎn)換為特殊作用的字符

被賦予新含義的普通字符現(xiàn)在擁有的作用
\n換行
\t轉(zhuǎn)化為制表符
\w(小寫)匹配包括下劃線的任何單詞字符
\W(大寫)匹配任何非單詞字符。等通于"[^A-Za-z0-9_]"
\r轉(zhuǎn)換后是回車符
\d匹配一個數(shù)字字符
\D匹配一個非數(shù)字字符。等價于[^0-9]
\s(小寫)空白符
\S(大寫)非空白符

2.1.3 中括號表達式

普通中括號包圍的字符組,表示某個單個字符匹配中括號內(nèi)的任意字符即匹配成功

  • x[abc]z : 可以匹配包含“xaz”、“xbz”、“xcz”的字符串
  • 取反表示法: 中括號內(nèi)開頭使用 ^ ,表示只要不是中括號內(nèi)的字符就匹配   

                x[ ^abc]z : 可以匹配包含 “xdz”、“xez” 等字符串,但不能匹配包含“xaz”、“xbz”、“xcz”的字符串 

特殊元字符在中括號中匹配

  • 想要在中括號中匹配: ^ ,需要將其放在 中括號非開頭的位置 ,如:[a^]
  • 想要在中括號中匹配: - ,需要將其放在 開頭位置或結尾位置 ,如:[abc-]、[-abc]
  • 想要在中括號中匹配: ] ,需要將其放在 開頭位置 ,如:[]abc]

2.1.4 位置匹配

只匹配字符,不匹配字符

  • ^ : 匹配行首
  • $ : 匹配行尾
  • \b   匹配單詞邊界處的位置(開頭和結尾) \bword\b 等價于 \<word\>
  • \<   匹配單詞開頭處的位置
  • \>   匹配單詞結尾處的位置
  • \B   匹配非單詞邊界處的位置

2.1.5 字符類

[:alnum:]字母和數(shù)字
[:alpha:]代表任何英文大小寫字母 A-Z  a-z
[:lower:]小寫字母
[:upper:]大寫字母
[:blank:]空白字符
[:space:]包括空格、制表符 (水平和垂直)、換行符、回車符等各種類型的空白,比[:blank:]包含的范圍廣
[:cntrl:]不可打印的控制字符(退格、刪除、警鈴...)
[:digit:]十進制數(shù)字
[:xdigit:]十六進制數(shù)字
[:graph:]可打印的非空白字符
[:print:]可打印字符
[:punct:]標點符號

2.1.6 量詞

\{m\} : 表示匹配前一個字符或前一個子表達式m次

  • \{m,n\} : (m<n)表示匹配前一個字符或前一個字表達式最少m次,最多n次

  • \{m,\} : 表示匹配前一個字符或前一個子表達式至少m次

  • \{,n\} : 表示匹配前一個字符或前一個字表達式最多n次(匹配0次也算是成功)

  • *  表示前一個字符或前一個子表達式匹配0次或多次,等價于:{0,}

  • .*   匹配任意長度的任意字符

3.擴展正則表達式的元字符

支持awk和egrep使用,如果grep和sed想要正常使用(grep -E  sed -r)

元字符作用含義
+匹配前面子表達式1次及以上
匹配前面子表達式0次或者1次
()將括號中的字符串作為一個整體
|以"或"的方式匹配字符串

3.1 擴展常用的量詞

  • +  表示匹配前一個字符或前一個子表達式1或多次,即至少一次 等價于 {1, }
  • ?  表示匹配前一個字符或前一個子表達式0或1次,等價于 {0,1} 等價于 {,1}

3.2 分組捕獲和反向引用

使用小括號()包圍一部分正則表達式,這部分正則表達式即成為一個分組整體,也稱為一個子表達式。

分組后可以使用 \N 來反向引用對應的分組匹配結果,N是1-9的正整數(shù),\1表示第一個分組表達式的匹配結果,\2表達第二個分組表達式的匹配結果。

注意:反向引用引用的是分組匹配后的結果,不是分組表達式

例如:正則表達式:(abc|def) and \1xyz 可以匹配字符串“abc and abcxyz ” 或“def and defxyz”,但是不能匹配“abc and defxyz” 或 “def and abcxyz”

二.grep 命令

1.命令簡介

grep 是一種強大的文本搜索工具,它能使用正則表達式,并把匹配的行打印出來

格式:

grep  [options]  pattern   [file]

options表示:選項;    pattern 表示:匹配的的表達式;   file 表示:文件名

例如:grep  -i  "root" /etc/passwd

2.常用選項

-m  數(shù)字匹配到數(shù)字行停止
-v取反
-i忽略字符大小寫
-n顯示匹配的行號
-c統(tǒng)計匹配的行數(shù)
-o僅顯示匹配到的字符串
-q靜默模式,不輸出任何信息
-A  數(shù)字after  后數(shù)字行
-B  數(shù)字before    前數(shù)字行
-C  數(shù)字context   前后各數(shù)字行
-e實現(xiàn)多個選項間的邏輯 or 關系
-E使用ERE,相當于egrep
-w匹配整個單詞
-F不支持正則表達式,相當于fgrep
-f處理兩個文件相同內(nèi)容,把第一個文件作為匹配條件
-r遞歸目錄,但不處理軟連接   開始搜索目錄
-R遞歸目錄,但處理軟連接

操作:

-m

-i

-n

-c

-o

-q

-A  -B  -C

-e

-w

-E

擴展正則中這些元字符可直接使用: ? 、 + 、 { 、 } 、 | 、 ( 和 ) 。

基礎正則中這些元字符前需要加反斜線轉(zhuǎn)義: \? 、 \+ 、 \{ 、 \} 、 \| 、 \( 和 \) 。

grep sed  默認使用基礎正則表達式

grep -E 、 sed -r 、 egrep 、 awk 擴展正則表達式

-r

3.操作

① 統(tǒng)計當前主機的連接狀態(tài)

② 統(tǒng)計當前連接主機數(shù)

③ 匹配QQ號

④ 匹配電話號碼

⑤  匹配郵箱

⑥ 統(tǒng)計 /etc/fstab 下面有多少單詞

三.sed命令

1.關于sed

1.1 簡介

sed 是從文件或管道中讀取一行,處理一行,輸出一行;再讀取一行,再處理一行,再輸出一行,直到最后一行。每當處理一行時,把當前處理的行存儲在臨時緩沖區(qū)中,稱為模式空間(PatternSpace),接著用 sed 命令處理緩沖區(qū)中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。一次處理一行的設計模式使得 sed 性能很高,sed 在讀取大文件時不會出現(xiàn)卡頓的現(xiàn)象。如果使用 vi 命令打開幾十M上百M的文件,明顯會出現(xiàn)有卡頓的現(xiàn)象,這是因為 vi 命令打開文件是一次性將文件加載到內(nèi)存,然后再打開。sed 就避免了這種情況,一行一行的處理,打開速度非???,執(zhí)行速度也很快。

1.2 sed 編輯器的工作過程

sed 的工作流程主要包括讀取、執(zhí)行和顯示三個過程:

  • 讀?。?/strong> sed 從輸入流 (文件、管道、標準輸入) 中讀取一行內(nèi)容并存儲到臨時的緩沖區(qū)中(又稱模式空間,pattern space )。
  • 執(zhí)行: 默認情況下,所有的 sed 命令都在模式空間中順序地執(zhí)行,除非指定了行的地址,否則 sed 命令將會在所有的行上依次執(zhí)行。
  • 顯示: 發(fā)送修改后的內(nèi)容到輸出流。在發(fā)送數(shù)據(jù)后,模式空間將會被清空。在所有的文件內(nèi)容都被處理完成之前,上述過程將重復執(zhí)行, 直至所有內(nèi)容被處理完。

注意:默認情況下所有的 sed 命令都是在模式空間內(nèi)執(zhí)行的,因此輸入的文件并不會發(fā)生任何變化,除非使用 "sed -i" 修改源文件、或使用重定向輸出到新的文件中。

1.3 瑪瑪哈哈

怎么解決 sed 命令處理容量過大,或內(nèi)容過多而導致執(zhí)行效率緩慢的問題?

方案一:

使用 split 命令進行文件分割(如果文件是百萬行的,那么我們就創(chuàng)建一個單獨的目錄,將文件分割為一百個一萬行的文本),再使用 sed 命令進行處理,除了使用 split 分割,也可以使用一個遍歷分割shell腳本進行執(zhí)行。

方案二:

cat  文件名 | sed  處理    (這個方案只能針對中型的文件文本,如果文本量過大,處理效果不好)

2.sed 命令與選項操作符

1. 格式

sed [option]... 'script;script;...' [input  file...]
     選項         自身腳本語法         支持標準輸入管道

2.常用選項

-e

用指定命令或者腳本來處理輸入的文本文件

只有一個操作命令時省略,一般在執(zhí)行多個操作命令使用

-f用指定的腳本文件來處理輸入的文本文件
-n

不輸出模式空間內(nèi)容到屏幕,即不自動打印

可以與 p 命令一起使用完成輸出

-r  -E使用擴展正則表達式
-h顯示幫助
-i直接修改目標文件
-i.xxx備份文件并原處編輯
-s將多個文件視為獨立文件,而不是單個連續(xù)的長文件流

3.操作符

“操作”用于指定文件對操作的動作行為,也就是 sed 的命令。

通常情況下是采用的 “[n1[,n2]]” 操作參數(shù)的格式。n1、n2是可選的,代表選擇進行操作的行數(shù),如操作需要在5~20行之間進行,則表示為 “5,20 動作行為” 

s替換,替換指定字符
d刪除,刪除選定的行
a增加,在當前行下方增加一行指定內(nèi)容
i插入,在選定行上方插入一行指定內(nèi)容
c替換,將選定行替換為指定內(nèi)容
w保存模式匹配的行至指定文件
r讀取指定文件的文本至模式空間中匹配的行后
y字符轉(zhuǎn)換,轉(zhuǎn)換前后的字符長度必須相同
p打印行內(nèi)容。如果同時指定行,表示打印指定行;如果不指定行,則表示打印所有內(nèi)容;如果有非打印字符,則以ASCII碼輸出。其通常與"-n"選項一起使用
=打印行號
l(小寫L)打印數(shù)據(jù)流中的文本和不可打印的ASCII字符(如結束符$  制表符\t)

操作:

顯示第二行內(nèi)容

4.腳本格式

由 ‘地址+命令’ 組成

  • ① 不給地址  對全文進行處理
  • ② 單地址  

  數(shù)字    指定的數(shù)字行

  $        最后一行

  • ③ 地址范圍

x,x    從第x行到第x行     3,6  從第3行到第6行

x,+x   從x行到+x行      3,+4   從3行到第7行

/pat1/,/pat2/     第一個正則表達式和第二個正則表達式之間的行

  • ④ 步進  ~

1~2  奇數(shù)行

2~2  偶數(shù)行

n;打印下一行

操作:

小問題:

如何打印一段時間間的日志

5.搜索替代

s/pattern/string/修飾符 查找替換,支持使用其它分隔符,可以是其它形式:s@@@,s###

替換修飾符:
g 行內(nèi)全局替換
p 顯示替換成功的行
w   /PATH/FILE 將替換成功的行保存至文件中

& 指代之前找到的內(nèi)容

指代變量

分組替換

sed  -nr  's/正則匹配/\1/p'

還可以變換順序

操作:

取ip

② 

或者

提取版本號

提取0644

6.變量

修改端口

修改網(wǎng)卡名

總結 

到此這篇關于shell正則表達式、grep命令和sed命令舉例詳解的文章就介紹到這了,更多相關shell正則表達式grep命令和sed命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Linux logrotate日志切割安裝配置說明

    Linux logrotate日志切割安裝配置說明

    這篇文章主要為大家介紹了Linux logrotate日志切割的安裝配置說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Linux中Shell腳本判斷文件/文件夾是否存在方法

    Linux中Shell腳本判斷文件/文件夾是否存在方法

    很多時候我們在做運維的時候,我們需要做一些自動化,這時我們就需要寫一些shell腳本,既然要用到shell腳本,就免不了文件操作,這篇文章主要給大家介紹了關于Linux中Shell腳本判斷文件/文件夾是否存在的相關資料,需要的朋友可以參考下
    2023-06-06
  • 用來查看linux內(nèi)存使用情況的shell腳本

    用來查看linux內(nèi)存使用情況的shell腳本

    本文為大家提供的這個腳本,通過查看status文件中VmRSS的字段來查看系統(tǒng)或進程使用的內(nèi)存情況,有需要的朋友不妨參考下
    2013-02-02
  • linux環(huán)境下編寫shell腳本實現(xiàn)啟動停止tomcat服務的方法

    linux環(huán)境下編寫shell腳本實現(xiàn)啟動停止tomcat服務的方法

    這篇文章主要介紹了linux環(huán)境下編寫shell腳本實現(xiàn)啟動停止tomcat服務的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • Linux命令行循環(huán)執(zhí)行shell命令

    Linux命令行循環(huán)執(zhí)行shell命令

    這篇文章主要介紹了Linux命令行,循環(huán)執(zhí)行shell命令的相關知識,主要包括死循環(huán),普通計數(shù)循環(huán),以及Linux shell循環(huán)命令 while死循環(huán)的用法,需要的朋友可以參考下
    2023-01-01
  • Linux中文件的基本屬性介紹

    Linux中文件的基本屬性介紹

    這篇文章介紹了Linux中文件的基本屬性,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • Shell基本運算符的實現(xiàn)

    Shell基本運算符的實現(xiàn)

    Shell支持多種運算符,主要包括算數(shù)運算符,關系運算符,布爾運算符,字符串運算符,文件測試運算符,下面我們就介紹一下這些運算符的用法
    2023-05-05
  • linux?shell輸出換行簡單實例

    linux?shell輸出換行簡單實例

    這篇文章主要給大家介紹了關于linux?shell輸出換行的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2023-02-02
  • linux shell中curl 發(fā)送post請求json格式問題的處理方法

    linux shell中curl 發(fā)送post請求json格式問題的處理方法

    這篇文章主要介紹了linux shell中curl 發(fā)送post請求json格式問題的處理方法,文中給大家提到了linux中使用curl發(fā)送post請求問題,需要的朋友可以參考下
    2018-07-07
  • shell實現(xiàn)學生成績管理系統(tǒng)

    shell實現(xiàn)學生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了shell實現(xiàn)學生成績管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評論

伽师县| 灌阳县| 三台县| 克什克腾旗| 霍州市| 县级市| 北宁市| 建宁县| 邹平县| 宜阳县| 建始县| 莱州市| 伊金霍洛旗| 上饶市| 瑞金市| 浦城县| 曲阳县| 灵台县| 康马县| 营山县| 华容县| 根河市| 保康县| 图们市| 石阡县| 上高县| 微博| 西峡县| 勃利县| 永登县| 中方县| 兴隆县| 嫩江县| 阳朔县| 甘洛县| 崇文区| 太仓市| 修水县| 锦屏县| 金沙县| 甘洛县|