Linux基礎之文字處理工具和正規表示式

2021-10-08 22:22:26 字數 3199 閱讀 6823

regexp:regular expressions,由一類特殊字元及文字字元所編寫的模式,其中有些字元(元字元)不表示字元字面意義,而是表示空中或通配的功能,類似於增強版的萬用字元功能。

但與萬用字元不同,萬用字元功能是用來處理檔名,而正規表示式是處理文字內容中字元

正規表示式分兩類:

1基本正規表示式元字元

1.1字元匹配

.		匹配任意單個字元,可以是乙個漢字

匹配指定範圍內的任意單個字元,示例:[wang] [0-9] [a-z] [a-za-z]

[^] 匹配指定範圍外的任意單個字元,示例:[^wang]

[:alnum:] 字母和數字

[:alpha:] 代表任何英文大小寫字元,亦即 a-z a-z

[:lower:] 小寫字母,示例:[[:lower:]],相當於[a-z]

[:upper:] 大寫字母

[:blank:] 空白字元

[:space:] 水平和垂直的空白字元 (比[:blank:]包含的範圍廣)

[:cntrl:] 不可列印的控制字元(退格,刪除,警鈴...)

[:digit:] 十進位制數字

[:xdigit:] 十六進製制數字

[:graph:] 可列印的非空白字元

[:print:] 可列印字元

[:punct:] 標號符號

範例:

[root@centos8 gkc]

# ls /etc/ | grep 'rc[.0-6]'

rc0.d

rc1.d

rc2.d

rc3.d

rc4.d

rc5.d

rc6.d

rc.d

rc.local

[root@centos8 gkc]

# ls /etc/ | grep 'rc[.0-6].'

rc0.d

rc1.d

rc2.d

rc3.d

rc4.d

rc5.d

rc6.d

rc.d

rc.local

[root@centos8 gkc]

# ls /etc/ | grep 'rc[.0-6]\.'

rc0.d

rc1.d

rc2.d

rc3.d

rc4.d

rc5.d

rc6.d

1.2匹配次數

用在要指定次數的字元後面,用於指定全面的字元要出現的次數

*       匹配前面的字元任意次,包括0次,貪婪模式:盡可能長的匹配

.* 任意長度的任意字元

\? 匹配其前面的字元0或1次,即:可有可無

\+ 匹配器前面的字元至少1次,即:肯定有,>=1

\ 匹配前面的字元n次

\ 匹配前面的字元至少m次,至多n次

\ 匹配前面的字元之多n次,<=n

\ 匹配前面的字元至少n次

範例:匹配正負數

[root@centos8 gkc]

# echo -1 -2 123 -123 234 | grep -e '-?[0-9]+'

grep: invalid option -- '?'

usage: grep

[option]

... pattern [file]

...try 'grep --help'

formore information.

[root@centos8 gkc]

# echo -1 -2 123 -123 234 | grep -e '\-?[0-9]+'

-1 -2 123 -123 234

[root@centos8 gkc]

# echo -1 -2 123 -123 234 | grep -e -- '-?[0-9]+'

-1 -2 123 -123 234

[root@centos8 gkc]

# echo -1 -2 123 -123 234 | grep -e '(-)?[0-9]+'

-1 -2 123 -123 234

1.3位置錨定

位置錨定可以用於定位出現的位置

^ 行首錨定  用於模式的最左側

$ 行尾錨定 用於模式的最右側

^pattern$ 用於模式匹配整行

^$ 空行

^[[:space:]]*$ 空白行

\< 或 \b 詞首錨定 用於單詞模式的左側

\> 或 \b 詞尾錨定 用於單詞模式的右側

\匹配整個單詞

範例:排除掉空行和#開頭的行

[root@centos8 gkc]

# grep -v '^$' /etc/profile | grep -v '^#'

1.4.1分組

分組:()將多個字元**在一起,當作乙個整體處理,如:\(root\)+

後向引用:分組括號中的模式匹配到的內容會被正規表示式引擎記錄於內部的變數中,這些變數的命名方式為:\1,\2,\3,…

\1 表示從左側起第乙個左括號以及與之匹配右括號之間的模式所匹配到的字元

示例:

\(string1\(string2\)\)

\1:string1\(string2\)

\2:string2

注意:後面引用引用前面的分組括號中的模式所匹配字元,而非模式本身

1.4.2或者

或者:\|

示例:

a\|b		#a或b

c\|cat

#c或cat

\(c\|c\)at #cat或cat

範例:排除空行和#開頭的行

Linux文字處理工具

linux中熟練的使用文字處理工具非常的重要,因為linux在設計的時候是採用一切皆檔案的哲學的,甚至連計算機中的配置也都使用偽檔案系統來表示,要查詢裡面的內容就是對檔案進行操作,所以學會使用檔案處理工具事半功倍。而在一切皆物件的windows中,因為物件封裝了所有的操作,包括顯示標準輸出的結果,使...

Linux 文字處理工具

tail f 執行tail f或tail f命令可以觀察檔案正在變化的內容 即跟蹤檔案的變化內容 檔案產生新內容時螢幕會顯示新增內容。seq n sort r head n 1 sort r命令能隨機排序。diff u file 1 file 2 file diff patch d file 1 f...

文字處理工具

參考 man,info,magedu講義 宣告 以下英文純屬個人翻譯,英文b級,歡迎糾正,以下內容純屬個人理解,並沒有對錯,只是參考,盜版不糾,才能有限,希望不誤人子弟為好。these commands read and write entire files,possibly transformin...