正則表達式與sed工具

一、正則表達式

 通俗來說,正則表達式是一種字符串的匹配方式,好比使用星號「*」來匹配任意的字符等。正則表達式其實是一個匹配模板,當bash執行這個正則表達式時,就會將全部的輸入數據與匹配模板匹配,匹配不成功的數據將會被過濾掉。 正則表達式

1.經常使用的元字符 bash

字符 工具

含義 spa

舉例 翻譯

. 3d

匹配除換行符之外的任意字符 對象

\bhi\b.*\bLucy\b ci

\w 字符串

匹配字母或數字或下劃線或漢字 string

\bhe\w

\s

匹配任意的空白符(包括空格製表符換頁符)

 

\b

匹配單詞的開始或結束

\bhi\b

^

匹配字符串的開始

^g.*d$

$

匹配字符串的結束

grep ‘d$’ test.ini

2.經常使用的限定符

字符

含義

舉例

*

重複零次或更屢次

grep ‘o*’tet.ini

+

重複一次或更屢次

[0-9]+匹配1個或更多的數字

?

重複零次或一次

 

{n}

重複n

^9{2}$

{n,}

重複n次或更屢次

 

{n,m}

重複nm

 

3.經常使用的反義代碼

/語法

說明

\W

匹配任意不是字母,數字,下劃線,漢字的字符

\S

匹配任意不是空白符的字符

\B

匹配不是單詞開頭或結束的位置

[^x]

匹配除了x之外的任意字符

[^aeiou]

匹配除了aeiou這幾個字母之外的任意字符

4.擴展正則表達式

字符

含義

舉例

n,m

等同於基本正則表達式的\{n,m\}

egrep n 9{1,3} tmp

+

匹配前面一個字符出現一次或屢次

egrep n go+d tmp

匹配前面一個字符出現零次或一次

egrep n go+d tmp

|

匹配邏輯或者,即匹配|前或後的字符串

egrep n adm|ftp tmp

egrep n (n|f)tp tmp

()

匹配正則集合

sed 's/\(root\)\(.*\)\(bash\)/\hei\2\hello/' tmp

 

二、sed工具

當用sed命令對文本進行處理的時候,sed先讀取對象的文本文件的第一行到模式空間中。

當有內容進入模式空間時,sed的編輯命令對模式空間中的內容進行編輯操做(修改,替換,刪除,追加,顯示等等)

模式空間中的內容編輯處理完成以後,sed把此內容經過標準輸出(默認爲顯示器)打印出來,並刪除模式空間中的內容。

第一行處理結束。重新讀取第二行的內容進行處理,直到最後一行。

2.1.sed基本語法

Sed [參數選項] {腳本指令} [輸入文件]

2.2.  sed的命令和選項:

命令

功能描述

a\

在當前行的後面加入一行或者文本。

c\

用新的文本改變或者替代本行的文本。

d

pattern space位置刪除行。

i\

在當前行的上面插入文本。

h

拷貝pattern space的內容到holding buffer(特殊緩衝區)

H

追加pattern space的內容到holding buffer

g

得到holding buffer中的內容,並替代當前pattern space中的文本。(替換最後一行)

G

得到holding buffer中的內容,並追加到當前pattern space的後面。(追加到最後一行)

n

讀取下一個輸入行,用下一個命令處理新的行而不是用第一個命令。

p

打印pattern space中的行。               //小寫

P

打印pattern space中的第一行。          //大寫

q

退出sed

w file

寫並追加pattern spacefile的末尾。

!

表示後面的命令對全部沒有被選定的行發生做用。sed '/ftp/!a hello' tmp

s/re/string

string替換正則表達式re

=

打印當前行號碼。

替換標記

g

行內全面替換,若是沒有g,只替換第一個匹配。

p

打印行。

x

互換pattern spaceholding buffer中的文本。 sed -e '/adm/h' -e '/ftp/x' tmp

y

把一個字符翻譯爲另外一個字符(可是不能用於正則表達式)Sed ‘y/a/A/’ tmp

選項

-e

容許多點編輯。

-n

取消默認輸出。

-f

直接將sed的動做寫在一個文件內

-i

直接修改文件內容,而不是輸出到終端

-r

Sed的擴展表達式的用法

2.2.1.新增

在某一行後面加入新內容

sed ‘/匹配項/a\新增項文件名

匹配某一行,在這行前面加入新內容

sed ‘/匹配項/i\新增項文件名

在某一行的後面加入新內容

sed ‘3a 新增項文件名

匹配某一行,在這行前面加入新內容

sed ‘3i 新增項文件名

匹配某一行,在某一行的後面讀入某文件的內容

sed ‘/匹配項/r 新增文件文件名

匹配某一內容,並將該內容寫到其餘文件中

Sed ‘/匹配項/w 其餘文件名文件名

刪除全部空行並在每一行的後面增長一個空行

sed ‘/^$/d;G’ 文件名

匹配某一行,把這一行加到全部行的後面

sed ‘/匹配項/h;G’文件名

2.2.2.替換

匹配某一內容並將該行第一個該內容替換

sed ‘s/匹配項/替換項/’文件名

匹配某一內容並所有替換該內容

sed ‘s/匹配項/替換項/g’文件名

匹配某一內容,並將該行內的另外一內容替換

sed ‘/匹配項1/s/匹配項2/替換項2/’文件名

匹配某一項,並將含有該內容的整行替換

sed ‘/匹配項/c\替換項’文件名

2.2.3.刪除

刪除第幾行

sed ‘3d’文件名

sed ‘$d’文件名

匹配某一行並刪除

sed ‘/匹配項/d’文件名

刪除第幾行到第幾行

sed ‘2,5d’文件名

刪除文中全部字母

sed ‘s/[a-zA-Z]//g’文件名

刪除文中全部數字

sed ‘s/[0-9]//g’文件名

刪除文中的基數行

sed  '1~2d' tmp

注意:若是要直接修改文件,則加入參數-i

三、總結

本文主要整理了正則表達式與sed的基本用法,後續將繼續整理awk的基本用法。

相關文章
相關標籤/搜索