正規表示式基礎字元匹配2

2021-06-02 13:44:49 字數 2454 閱讀 6595

上個博文記錄了正規表示式的基本代換規則,

這次先通過幾個問題回憶一下:

1如何代換空行:

/^$/
在指令碼中,^代表行首,$代表行尾。這個行首不是行的第乙個字母而是第乙個字母前面的空位,這一點非常重要。

2如何在行首加入指定字元:

例如:在行首加入'#',這個符號是注釋的意思。

s/^/#/

前面的s先不去看它,後面的^,#代表行首和加入到行首的字元。前面的s是什麼意思這篇博文再看。

在linux系統中,有兩個工具可以處理正規表示式。sed 和 awk。我們先看sed。

sed從本質上來講是乙個文字流處理器。而文字流是一種叫做檔案的東西。這個定義我相信大家應該沒有什麼可以質疑的,新手總是不知道「流」是什麼東西。在這裡「流」就是字串行。而檔案的定義就是字串行。

再來看sed的基本用法

sed 'script' files

files 是乙個或多個檔案的列表,script是如下形式的乙個或多個命令:

/pattern/ action

他的具體格式應該如下:

sed '/pattern/ action' files

pattern 是過文化正規表示式,action是下列命令之一。如果pattern被省略,輸入的每一行都被操作。

action描述p

列印d刪除s

用乙個表示式置換另乙個表示式

我們用乙個小的關於水果的**單來看看如何使用sed來過濾

cat fruit_prices.txt

fruit price/lbs

banan 0.89

paech 0.79

kiwi 1.50

mango 2.20

我們先來輸出**小於$1的水果**

sed '/ 0\.[0-9][0-9]$/p' fruit_prices.txt
這個正規表示式的含義是待定模式應該是0開頭,接下來是乙個點,再下來是兩位數字,再下來是$這意味著這個字串應該位於結尾,然後是動作p列印。

使用這個例子如果在機器上驗證呢?

首先使用vi fruit_prices.txt建立乙個檔案,並且輸入水果**。

然後再在命令列中輸入上面的命令。

然而你看到的應該是這樣的內容:

fruit         price/lbs

banan 0.89

banan 0.89

paech 0.79

paech 0.79

kiwi 1.50

mango 2.20

我們想要得到1美元以下的水果,為什麼出現這麼多呢?仔細觀察好像有好多記錄都是重複的這是因為sed預設情況下會輸出每一行,再輸出你選定的行,這意味著你可能會看到兩次你要的行。

修改一下命令:

sed -n ' 0\.[0-9][0-9]$/p' fruit_prices.txt

這模式前面加上乙個-n選項,sed就不會輸出"非選中行"了。

還可以刪除指定的行

/pattern/d

sed '/^[mn]ango/d' fruit_prices.txt

需要注意,sed命令並不會改變檔案的真實內容,它只會將修改輸出,如果你想真的修改檔案需要使用重定向。

還可以替換指定單詞

/pattern1/s/pattern2/pattern3/
使用如下格式替換

sed 's/eqal/equal/g' nsh.txt
可以替換eqal為equal,在整個檔案中。

還有有乙個功能

sed 's/ *[0-9[0-9]*\.[0-9][0-9]$/\$&/' fruit_prices.txt
其中第而二個$後面的&是代替前面所匹配到的字元的。這個功能就是把所有**前面加上乙個$符號。

可以一次性執行多個命令

sed -e 's/paech/peach/' -e 's/ *[0-9][0-9]*\.[0-9][0-9]$/\$&/' fruit_prices.txt
它的格式是:

sed -e 'cmd1'   ... -e 'cmdn' files

正規表示式字元匹配

普通字元由所有那些未顯式指定為元字元的列印和非列印字元組成。這包括所有的大寫和小寫字母字元,所有數字,所有標點符號以及一些符號。最簡單的正規表示式是乙個單獨的普通字元,可以匹配所搜尋字串中的該字元本身。例如,單字元模式 a 可以匹配所搜尋字串中任何位置出現的字母 a 這裡有一些單字元正規表示式模式的...

正規表示式匹配字元含義

正規表示式有多種不同的風格。下表是在pcre中元字元及其在正規表示式上下文中的行為的乙個完整列表 字元 描述 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了r...

正規表示式 單字元匹配

正規表示式 單字元匹配 匹配任意1個字元 除了 n 匹配 中列舉的字元 ab456c a za z d 匹配數字,即0 9 d 匹配非數字,即不是數字 s 匹配空白,即 空格,tab鍵 t,n s 匹配非空白 w 匹配單詞字元,即a z a z 0 9 國家的文字 w 匹配非單詞字元 匹配任意乙個數...