unix shell學習筆記2

2021-08-31 19:51:14 字數 3100 閱讀 7294

正規表示式

(regular expression,re)

是一種字元模式,用於在查詢過程中匹配指定的字元。

正規表示式元字元(萬用字元)

元字元/

萬用字元功能

例子匹配物件

^行首定位符

/^hello/

匹配以hello

開頭的$

行尾定位符

/hello$/

匹配以hello

結束的行

.匹配單個字元

/l..e/

匹配以l

開頭,中間

2字元並以

e結尾的詞*匹配

0或多個正好在它之前的那個字元。例如正規表示式

.* 意味著能夠匹配任意數量的任何字元。

/.*/

匹配任意字元

匹配任意一組任意字元

/[hh]ello/

hello

或hello

[x-y]

匹配從x-y

範圍字元

/a[a-c]c/

aac,abc,acc

[^]匹配不在指定組內字元

[^1-9]

不在1-9

之間的字元

\轉義字元

/hello\./

hello.

以下的在vi、

grep

支援\<

詞首定位符

/\匹配包含

love

開頭的行

\>

詞尾定位符

/\>love/

匹配包含

love

結尾的行

\(..\)

x\字元x

重複出現m次

x\***a  aaa***b dd***ee

x\字元

x至少重複出現m次

x\***a ***xa

x\字元x重複

m次到n次

x\***a ***xa ***xxa

命令格式:

grep    [-bchilnsvw]     limited-regular-expression     [filename...]

grep

(global search regular expression(re) and print out the line,

全面搜尋正規表示式並把行列印出來)是一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹配的行列印出來。

unix

的grep

家族包括

grep

、egrep

和fgrep

。egrep

和fgrep

的命令只跟

grep

有很小不同。

egrep

是grep

的擴充套件,支援更多的

re元字元,

fgrep

就是fixed grep

或fast grep

,它們把所有的字母都看作單詞,也就是說,正規表示式中的元字元表示回其自身的字面意義,不再特殊。

linux

使用gnu

版本的grep

。它功能更強,可以通過-g、

-e、-f命令列選項來使用

egrep

和fgrep

的功能。

grep

的工作方式是這樣的,它在乙個或多個檔案中搜尋字串模板。如果模板包括空格,則必須被引用,模板後的所有字串被看作檔名。搜尋的結果被送到螢幕,不影響原檔案內容。

grep

可用於shell

指令碼,因為

grep

通過返回乙個狀態值來說明搜尋的狀態,如果模板搜尋成功,則返回

0,如果搜尋不成功,則返回

1,如果搜尋的檔案不存在,則返回

2。我們利用這些返回值就可進行一些自動化的文字處理工作。

grep

正規表示式的原字符集與上文的正規表示式的原字符集基本一致,這裡只補充

grep

的正規表示式元字符集。

元字元/

萬用字元功能

例子說明

\w匹配文字和數字字元,即

[a-za-z0-9]

'g\w*p'

匹配以g後跟零個或多個文字或數字字元,然後是p

\w \w的反置形式,匹配乙個或多個非單詞字元\b

單詞鎖定符

'\bgrep\b'

只匹配grep 選項

功能-b

列印匹配行前面列印該行所在的塊號碼-c

只列印匹配的行數,不顯示匹配的內容-h

當搜尋多個檔案時,不顯示匹配檔名字首-i

忽略大小寫差別-l

列印匹配模板的檔案清單-n

在匹配的行前面列印行號-s

不顯示關於不存在或者無法讀取檔案的錯誤資訊-v

反檢索,只顯示不匹配的行-w

如果被\<

和\>

引用,就把表示式做為乙個單詞搜

索$ ls -l | grep '^a'                               

通過管道過濾

ls -l

輸出的內容,只顯示以

a開頭的

行$ grep 'test' d*                 

顯示所有以

d開頭的檔案中包含

test

的行$ grep 'test' aa bb cc      

顯示在aa,bb

,cc檔案中匹配

test

的行$ grep '[a-z]\' aa       

顯示所有包含每個字串至少有

5個連續小寫字元的字串的行

$ grep 'w\(es\)t.*\1' aa

如果west

被匹配,則

es就被儲存到記憶體中,並標記為

1,然後搜尋任意個字元(

.*),這些字元後面緊跟著另外乙個es(

\1),找到就顯示該行。如果用

egrep

或grep -e

,就不用

"\"號進行轉義,直接寫成

'w(es)t.*\1'

就可以了

unix shell學習筆記1

table of contents 1.shell 簡介1.1 shell 種類1.2 shell 對比1.3 詳細特性比較 1.4 shell初始檔案 c shell tc shell bourne shell bash shell korn shell 其中,c shell 和tc shell依...

unix shell學習筆記4

容,處理後,不改變檔案內容。sed options command file s sed options f scriptfile file s command a 在當前行後面加入一行文 本b lable 分支到指令碼中帶有標記的地方,如果分支不存在則分支到指令碼的末 尾c 從模板塊 patter...

unix shell學習筆記 C shell程式設計

shell指令碼由命令和散布其間的注釋組成。執行指令碼步驟為 選擇shell 授予執行許可權 執行指令碼 選擇shell,第一行以 即shbang指明所用的shell直譯器,如 bin csh 或者 bin tcsh 授予執行許可權 chmod x myscript 執行指令碼 myscript 例...