亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一.正則表達式概述

1.正則表達式定義

1.1 定義

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

1.2 了解

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

1.3 層次分類

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

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

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

2.基礎(chǔ)正則表達式的元字符

基礎(chǔ)正則表達式是常用的正則表達式部分

\表示轉(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^]
  • 想要在中括號中匹配: - ,需要將其放在 開頭位置或結(jié)尾位置 ,如:[abc-]、[-abc]
  • 想要在中括號中匹配: ] ,需要將其放在 開頭位置 ,如:[]abc]

2.1.4 位置匹配

只匹配字符,不匹配字符

  • ^ : 匹配行首
  • $ : 匹配行尾
  • \b   匹配單詞邊界處的位置(開頭和結(jié)尾) \bword\b 等價于 \<word\>
  • \<   匹配單詞開頭處的位置
  • \>   匹配單詞結(jié)尾處的位置
  • \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 來反向引用對應(yīng)的分組匹配結(jié)果,N是1-9的正整數(shù),\1表示第一個分組表達式的匹配結(jié)果,\2表達第二個分組表達式的匹配結(jié)果。

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

例如:正則表達式:(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 關(guān)系
-E使用ERE,相當(dāng)于egrep
-w匹配整個單詞
-F不支持正則表達式,相當(dāng)于fgrep
-f處理兩個文件相同內(nèi)容,把第一個文件作為匹配條件
-r遞歸目錄,但不處理軟連接   開始搜索目錄
-R遞歸目錄,但處理軟連接

操作:

-m

-i

-n

-c

-o

-q

-A  -B  -C

-e

-w

-E

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

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

grep sed  默認使用基礎(chǔ)正則表達式

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

-r

3.操作

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

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

③ 匹配QQ號

④ 匹配電話號碼

⑤  匹配郵箱

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

三.sed命令

1.關(guān)于sed

1.1 簡介

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

1.2 sed 編輯器的工作過程

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

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

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

1.3 瑪瑪哈哈

怎么解決 sed 命令處理容量過大,或內(nèi)容過多而導(dǎo)致執(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增加,在當(dāng)前行下方增加一行指定內(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字符(如結(jié)束符$  制表符\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)卡名

總結(jié) 

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

相關(guān)文章

  • awk實現(xiàn)Left、join查詢、去除重復(fù)值以及局部變量講解例子

    awk實現(xiàn)Left、join查詢、去除重復(fù)值以及局部變量講解例子

    這篇文章主要介紹了awk實現(xiàn)Left、join查詢、去除重復(fù)值以及局部變量講解例子,awk的高級使用技巧,需要的朋友可以參考下
    2014-07-07
  • linux 使用NSF 映射遠程磁盤目錄的實現(xiàn)

    linux 使用NSF 映射遠程磁盤目錄的實現(xiàn)

    下面小編就為大家?guī)硪黄猯inux 使用NSF 映射遠程磁盤目錄的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Linux下查找后門程序 CentOS 查后門程序的shell腳本

    Linux下查找后門程序 CentOS 查后門程序的shell腳本

    這篇文章主要介紹了Linux下查找后門程序 CentOS 查后門程序的shell腳本,需要的朋友可以參考下
    2014-09-09
  • shell腳本實現(xiàn)輸入密碼顯示星號

    shell腳本實現(xiàn)輸入密碼顯示星號

    本文給大家分享使用shell腳本實現(xiàn)輸入密碼顯示星號的腳本寫法,在文章末尾給大家補充了shell輸入密碼時關(guān)閉屏幕回顯的實現(xiàn)方法,需要的朋友參考下吧
    2017-01-01
  • Linux換行符的使用方法詳解

    Linux換行符的使用方法詳解

    本文介紹了Linux中常用的換行符LF及其在文件中的表示,展示了如何使用sed命令替換換行符,并列舉了與換行符處理相關(guān)的Linux命令,通過代碼講解的非常詳細,需要的朋友可以參考下
    2025-04-04
  • python實現(xiàn)Linux異步epoll代碼

    python實現(xiàn)Linux異步epoll代碼

    本文提供了python實現(xiàn)Linux異步epoll的代碼,供大家參考使用,希望對你有幫助
    2013-11-11
  • linux命令之find命令簡單概述

    linux命令之find命令簡單概述

    這篇文章主要為大家詳細介紹了linux命令之find命令的簡單使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • shell腳本實現(xiàn)猜數(shù)游戲

    shell腳本實現(xiàn)猜數(shù)游戲

    這篇文章主要為大家詳細介紹了shell腳本實現(xiàn)猜數(shù)游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Shell腳本批量重命名文件后綴的3種實現(xiàn)

    Shell腳本批量重命名文件后綴的3種實現(xiàn)

    這篇文章主要介紹了Shell腳本批量重命名文件后綴的3種實現(xiàn),本文分別使用find + xargs +sed、for循環(huán)、rename等3種方法實現(xiàn)重命名文件后綴,需要的朋友可以參考下
    2014-09-09
  • Linux文件系統(tǒng)介紹

    Linux文件系統(tǒng)介紹

    這篇文章介紹了Linux中的文件系統(tǒng),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05

最新評論