歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix基礎知識 >> 正則表達式的簡單用法以及管道和重定向

正則表達式的簡單用法以及管道和重定向

日期:2017/3/3 15:21:15   编辑:Unix基礎知識

正則表達式(Regular EXPression),簡單的來說,就是用一些符合某種語法規則的字符串來實現其檢索的功能。我們這裡以 grep 為例,來學習正則表達式:

grep:使用基本正則表達式定義的模式來過濾文本的命令;

grep的用法:

grep [options] PATTERN [FILE ...]

options:

-i:忽略字符大小寫

--color:匹配的字符顯示顏色 例:alias grep=grep --color)

-v:顯示沒有被模式匹配到的行

-o:只顯示被模式匹配到的字符串

-E:使用擴展的正則表達式

-A:顯示匹配文件後邊的兩行

-B:顯示匹配文件前邊的兩行

-C:匹配文件前後兩行的內容都顯示

正則表達式:

基本正則表達式

擴展正則表達式

(其匹配次數處於貪婪模式,即盡可能長的匹配。)

基本正則表達式

元字符

.:匹配任意單個字符

# grep 'root.' a.txt --> 顯示在a.txt文件中含有root並且其後面跟了任意字符的行

*:匹配其前面的字符任意次(可以為0次)

a*b --> b,ab,aab,aaab

# grep 'a*b' test.txt

.*:匹配任意長度的任意字符

a.*b: ab,aab,amnb. --> (文件中含有以a開頭b結尾的行)

\?:匹配器前面的字符1次或0次 (部分匹配就行)

\{m,n\}:匹配其前面的字符至少m次,至多n次. (修飾第一個\前面的字符)

# grep 'a\{1,3\}b' test.txt --> 匹配a至少一次至多3次

[ ]:匹配指定范圍內的任意單個字符

[0-9]: 取0-9中的任意一個數字

[^]:匹配指定范圍外的任意單個字符

[^[0-9]] : 非0-9的任意一個字符

字符集合

[:space:]:空白字符

[:punct:]:標點符號

[:lower:]:小寫字母

[:upper:]:大寫字母

[:alpha:]:大小寫字母

[:digit:]:數字

[:alnum:]:數字和大小寫字母

位置的錨定:

^:錨定行首,此字符後的任意內容必須出現在行首

grep "^root" /etc/passwd --> 在/etc/passwd文件中以root為行首的行

$:錨定行尾,此字符前的任意內容必須出現在行尾

bash$ --> 以bash為行尾的行

^$:空白行

\<或\b:錨定詞首,其後面的任意字符必須作為單詞首部出現

\<abab --> abab後邊還有字符,一般用於規定某個字符串不處於行尾

\>或\b:錨定詞尾,其前面的任意字符必須作為單詞的尾部出現(用法同上)

分組:\(\)

\(ab\)* :ab可以出現任意次或0次。(將ab看成一個整體)

後向引用:後邊可以調用前邊出現的字符串

\(\)...\1..\2..\3

\n:第n個左括號以及與之對應的右括號所包括的所有內容

# grep '^\([0-9]\).*\1$' /etc/inittab

--> 在/etc/inittab文件中,以一個數字開頭並以同樣的數字結尾的行

擴展正則表達式

用法: grep -E 或者 egrep

字符、次數匹配

. [ ] [^] * (同基本正則表達式)

?:匹配其前的字符次或0次;

+:匹配其前的字符至少一次 ;相當於 \(\)

{m,n}:匹配其前的字符至少m次,至多n次;相當於 \{m,n}\

位置錨定與基本正則表達式相同,即

^ $ \< \>

分組:() 相當於\(\)

同樣支持後向引用:

()... \1...\2...\3...

查看本欄目更多精彩內容:http://www.bianceng.cn/OS/unix/

管道和重定向:

重定向:

>:輸出重定向(覆蓋輸出)

ls /var > /tmp/var

>>:追加輸出 (不覆蓋)

set -C:禁止對已存在文件使用覆蓋重定向

>|:強制覆蓋輸出

set +C:若文件存在,覆蓋重定向

2>:重定向錯誤輸出

2>>:追加顯示錯誤輸出

&>:重定向標准輸出或錯誤輸出至同一文件。(覆蓋)

ls /varr > /tmp/var3.out 2> /tmp/var3.out

ls /var &> /tmp/var3.out

<:輸入重定向 (tr 'a-z' 'A-Z' < /etc/fstab

<<: 在此處生成文檔

cat << EOF/END (<<後邊的是在此處結束文檔)

cat >> /tmp/myfile.txt << EOF

管道:前一個命令的輸出,作為後一個命令的輸入

命令1 | 命令2 | 命令3 | ...

# ls /var | tr 'a-z' 'A-Z' --> 將/var文件裡的小寫字母轉換成大寫字母

(組合小命令完成復雜任務)

補充

tee:從標准輸入讀取命令,標准輸出到顯示器和保存文件中。

(echo "ha" | tee /var/ha.out)

或者

|:or

'(C|c)at' --> 匹配Cat,cat

grep支持正則表達式

egrep支持擴展正則表達式

fgrep:不支持正則表達式(快速查找)

Copyright © Linux教程網 All Rights Reserved