shell中的正規表示式 sed awk

2021-06-16 03:55:59 字數 3411 閱讀 3459

本文主要說一些正則的基本語法,並且結合linux的各種小工具(egrep、sed、awk)列舉一些使用例項。

一、基本語法

正則的基本語法就大概是下面這些,但是正則遠不止這些,甚至可以寫一本書,當然了,我們這裡只列舉一些簡單的

用法,這些已經可以解決大部分實際問題了。

1、字元類 字元

含義舉例

.匹配任意乙個字元

abc.可 以匹配abcdabc9

匹配括號中的任意乙個字元

[abc]d可以匹配adbdcd

-用在中,表示字元範圍

[0-9a-fa-f]可以匹配一位十六進製制數字

^如果位於的開頭,則匹配除去括號中字元之外的一切字元

[^xy]匹配除xy之外的任一字元,因此[^xy]1可以 匹配a1b1但不匹配x1y1

[[:***:]]grep工 具預定義的一些命名字元類

[[:alpha:]]匹配乙個字母,[[:digit:]]匹配乙個數字

2、數量限定符 字元

含義舉例

?緊跟在它前面的單元匹配零次或一次

[0-9]?/.[0-9]匹配0.02.3.5等,由於.在正規表示式中是乙個特殊字元,所以需要用/轉 義一下,取字面值

+緊跟在它前面的單元匹配一次或多次

[a-za-z0-9.-_]+@[a-za-z0-9.-_]+/.[a-za-z0-9.-_]匹配email

*緊跟在它前面的單元匹配零次或多次

[0-9][0-9]*匹配至少一位數字,等價於[0-9]+[a-za-z_]+[a-za-z_0-9]*匹 配c語言的識別符號

緊跟在它前 面的單元應精確匹配n次[1-9][0-9]匹 配從100999的整數

緊跟在它前面的單元至少要匹配n次

[1-9][0-9]匹配三位以上(含三位)的整數

緊跟在它前面的單元至多匹配m次

[0-9]和[0-9]?意義一樣,

緊跟在它前面的單元至少匹配n次,至多匹配m次

[0-9]/.[0-9]/.[0-9]/.[0-9]/.用於匹配ip位址

3、位置限定符 字元

含義舉例

^匹配行首的位置

^content匹配以content開頭的行

$匹配行末的位置

:$匹配以:結尾的行,^$匹配空行

/<匹配單詞開頭的位 置

/

/>匹 配單詞結尾的位置

p/>匹配leap ...,但不匹配parentsleepy

/b匹 配單詞開頭或結尾的位置

ap/b匹配leap,/ble匹配leap,/bat/b匹配... at ...,但不匹配catatexitbatch

/b匹配非單詞開頭和結尾的位置

/bat/b匹配battery,但不匹配... attendhat ...

4、其他特殊字元 字元

含義舉例

/轉義字元,普通字元轉義為特殊字元,特殊字元轉義為普通字元

普 通字元<寫成/<表 示單詞開頭的位置,特殊字元.寫成/.以 及/寫成//就當作普通字元來 匹配

()將正規表示式的一部分括起 來組成乙個單元,可以對整個單元使用數量限定符

([0-9]/.)[0-9]匹 配ip位址

|連線兩個表示式,表示或的關係

n[o-either]可以匹配no或neither

二、小工具

1、grep/egrep

grep是一種查詢過濾工具,正規表示式在grep中 用來查詢符合模式的字串。

egrep相當於grep -e,表示採用extended正規表示式語法。grep的正規表示式有basic和 extended兩種規範

上述列舉的正規表示式語法都適用於egrep。而grep的語法則相對簡陋一些,?+(){}|都只是一些匹配字元了。

2、sed

sed意為流編輯器(stream editor),在shell指令碼和makefile中作為過濾器使用非常普遍,也就是把前乙個程式的輸出引入sed的輸入,經過一系列編輯命令轉換為另一種格式輸出。sed和vi都源於早期unix的ed工具,所以很多sed命令和vi的末行命令是相同的。

在正常情況下,sed將待處理的行讀入模式空間,指令碼中的命令就一條接著一條的對該行進行處理,直到指令碼執行完畢,然後該行被輸出,模式空間清空;然後重複剛才的動作,檔案中的新的一行被讀入,直到檔案處理完備。

看了很多寫sed的就屬鳥哥寫的最好了,摘錄一下:

不過鳥哥的不是很全,特補充如下:

補充幾個除d、a、i、s、c、p之外不常用的命令:

3、awk

待續。。。。。。。

shell 正規表示式 sed

字串 字串的初值 備用值 變數非空是不可使用 正規表示式 可以配合某工具對文件進行過濾篩選 grep root user 以root開頭的行 grep bash user 以bash結尾的行 grep 0 9 user 篩選出0 9的數字 grep 0 9 user 排除所有0 9的數字 grep ...

sed 正規表示式

如果testfile的內容是 welcome to the world of regexp 現在要去掉所有的html標籤,使輸出結果為 hello world welcome to the world of regexp 怎麼做呢?如果用下面的命令 sed s g testfile 結果是兩個空行,...

sed 常用正規表示式

1.乙個比較實用的正規表示式 匹配html的嵌入 匹配 的嵌入碼 刪除僅由空字元組成的行 sed space d filename 匹配html標籤 例如 從html檔案中剔除html標籤 sed s g space d file.html 例如 要從下列 中去除 及其中包括的 b 4c6c2a65...