歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux中正則表達式與文件格式化處理命令(awk/grep/sed)

Linux中正則表達式與文件格式化處理命令(awk/grep/sed)

日期:2017/3/1 10:00:16   编辑:Linux編程

一.正則表達式

1.1國際字符模式匹配或匹配模式的類名

[:alnum:] : 0-9,A-Z,a-z

[:alpha:] : A-Z,a-z

[:upper:] : A-Z

[:lower:] : a-z

[:digit:] : 0-9

[:space:] : 空格或tab鍵

1.2基礎正則表達式

^word:待查找的字符串在行首。

word$:待查找的字符串在行尾。

. :代表一定有一個任意字符的字符。

\ :轉義字符,將特殊符號的意義去除。

* :重復0個到無窮多個的前一個字符。

[list]:從字符集合的RE字符裡面找出想要選取的字符,在[]當中代表一個待查找的字符;

例如:[afg]代表a或f或g的意思。

[n1-n2]:代表想要找出的字符范圍;

eg:[0-9]表示0到9;[a-z]代表a到z。

[^list]:找出不要的字符串或范圍,即找出不含list中字符串的;

eg:[^A-Z]:代表不要非大寫字母;[^t]:不要字母t。

\{n,m\}:相當於{n,m}的轉義,因{的轉義為\{,因}的轉義為\},表示連續n到m個前一個字符。

\{n\}:相當於{n},即表示重復n個前一個字符。

\{n,\}:相當於{n,},表示連續n個以上的前一個字符。

注:正則表達式的特殊字符與一般命令行輸入命令的“通配符”並不相同。在通配符中*表示0到無限多個字符。但在正則表達式中,*則是0到無窮多個前一個字符。

eg:查找以a開頭的文件名的兩種實現:

通配符: ls -l a*

正則表達式:ls -l | grep '^a.*'

1.3擴張正則表達式

grep默認只支持基礎正則表達式,如果使用擴展性表達式,可以使用grep -E,不過更建議直接使用egrep。egrep == grep -E。

+ :重復一個或一個以上的前一個RE字符。

eg:egrep -n 'go+d' a.txt

即god,good,goood,...。

? :0個或1個的前一個RE字符。

eg: egrep -n 'go?d' a.txt

即gd,god,good,...。

| :用或(or)的方式找出數個字符串。

eg:egrep -n 'gd|god' a.txt

查找含gd或good的行。

():找出‘組’字符串

eg:egrep -E 'g(la|oo)d' a.txt

找出glad或good的行。

()+:多個重復組的判別

eg:egrep 'A(xyz)+C' a.txt

開頭為A,結尾為C,中間位1一個以上的xyz字符串。

注:RE:regular expression(正則表達式)。

Copyright © Linux教程網 All Rights Reserved