linux之centos運維kafka
正則表示式識別的特殊字元包括:
. * [ ] ^ $ { } \ + ? | ( )
如果要用某個特殊字元為文字字元,則必須轉義
[root@iZbp11f8g5h7oozejqy6k6Z test5.9]# sed -n '/\$/p' data1 the cost is $4.0
另外'/'雖然不是正則表示式的特殊字元,但是也需要轉義
[root@iZbp11f8g5h7oozejqy6k6Z test5.9]# echo '/ 111' | sed -n '/\//p' / 111
錨字元
脫字元(^)定義從資料流中文字行的行首開始的模式
行尾錨點($)
[root@iZbp11f8g5h7oozejqy6k6Z test5.9]# df -h|sed -n '/^\/dev\/vda/p' /dev/vda1 99G 2.8G 92G 3% /
[root@iZbp11f8g5h7oozejqy6k6Z test5.9]# df -h|sed -n '/\/dev$/p' devtmpfs 1.9G 0 1.9G 0% /dev
組合錨點,可以過濾出空白行
[root@iZbp11f8g5h7oozejqy6k6Z test5.9]# cat data2 1111 222 333 444 [root@iZbp11f8g5h7oozejqy6k6Z test5.9]# sed'/^$/d' data2 1111 222 333 444
排除型字元組,會列印除了‘ch’以外的字元
[root@iZbp11f8g5h7oozejqy6k6Z test5.9]# echo "this test is at line four" | sed -n '/[^ch]at/p' this test is at line four
特殊字元組
[[:alpha:]] 匹配任意字元字元,不管大小寫
[[:alnum:]] 匹配任意字母數字字元,0-9 A-Z a-z
[[:blank:]] 匹配空格或製表符
[[:digit:]] 匹配0-9之間的數字
[[:lower:]] 匹配小寫字母字元a-z
[[:print:]] 匹配任意可列印字元
[[:punct:]] 匹配標點符號
[[:space:]] 匹配任意空白字元:空格、製表符、NL、FF、VT和CR
[[:upper:]] 匹配任意大寫字元A-Z
[root@iZbp11f8g5h7oozejqy6k6Z test5.9]# echo "abc123" | sed -n '/[[:digit:]]/p' abc123
可以用[[:digit:]]代替[0-9]
星號
在字元後面放置星號表明該字元必須在匹配模式的文字中出現0次或多次
[root@iZbp11f8g5h7oozejqy6k6Z test5.9]# echo 'ik' | sed -n '/ie*k/p' ik
擴充套件正則表示式
sed編輯器和gawk程式的正則表示式引擎之間是有區別的。gawk程式可以使用大多數擴充套件正則表示式模式符號,並且能提供一些額外額過濾功能,而這些功能都是
sed編輯器所不具備的。但正因為如此,gawk程式在處理資料流是通常才比較慢
問號
問號類似於星號,不過有點細微的不同,問號表明前面的字元可以出現0次或1次,但只限於此
[root@iZbp11f8g5h7oozejqy6k6Z test5.9]# echo 'iek' |gawk '/ie?k/{print $0}' iek [root@iZbp11f8g5h7oozejqy6k6Z test5.9]# echo 'ik' |gawk '/ie?k/{print $0}' ik
加號
加號表示前面的字元可以出現1次或者多次,至少出現1次
[root@iZbp11f8g5h7oozejqy6k6Z test5.9]# echo 'beet'|gawk '/be+t/{print $0}' beet
使用花括號
ERE中的花括號允許為可重複的正則表示式指定一個上限。這通常稱為間隔,可以用兩種格式來指定區間。
m:正則表示式準確出現m次
m,n:正則表示式至少出現m次,至多n次
預設情況下,gawk程式不會之別正則表示式間隔,必須指定gawk程式的--re-interval命令列選項才能識別正則表示式間隔
[root@iZbp11f8g5h7oozejqy6k6Z test5.9]# echo 'bet' | gawk '/be{1,2}t/{print $0}' bet
表示式分組
[root@iZbp11f8g5h7oozejqy6k6Z test5.9]# echo "Staurday" | gawk '/Sta(urday)?/{print $0}' Staurday
正則表示式實際應用
統計$PATH下檔案數量
[root@iZbp11f8g5h7oozejqy6k6Z test5.9]# cat test1.sh #! /bin/bash mypath=$(echo $PATH|sed 's/:/ /g') count=1 for p in $mypath do if [ -d $p ] then f=$(ls $p) for item in $f do count=$[ $count + 1 ] done echo "$p - $count" else echo "$p not found" fi done [root@iZbp11f8g5h7oozejqy6k6Z test5.9]# sh test1.sh /usr/local/sbin - 1 /usr/local/bin - 1 /usr/sbin - 414 /usr/bin - 1321 /root/bin not found
匹配電話號碼
以杭州為例:
0571 1234 5678
[root@iZbp11f8g5h7oozejqy6k6Z ~]# echo "(0571-1234.5678"|gawk '/^\(?(0571)\)?(| |-|\.)[0-9]{4}( |-|\.)[0-9]{4}$/p' (0571-1234.5678 [root@iZbp11f8g5h7oozejqy6k6Z ~]# echo "(0571-1234.5678"|gawk '/^\(?(0571)\)?(| |-|\.)[0-9]{4}( |-|\.)[0-9]{4}$/{print $0}' (0571-1234.5678
其中
^\(? 表示開頭為'('或者無(
(0571)為一個組
\)?表示有無 ')'
(| |-|\.)表示空格或者'-'或者'.'
[0-9]{4}表示出現4次數字
[0-9]{4}$表示以4個數字結尾
可以用來過濾號碼
解析郵箱
username@hostname
username可以是數字字母以及 . - + _
hostname由一個或多個域名和一個伺服器名組成只允許數字字母以及 . _
伺服器名和域名都用.分隔,先指定伺服器名,緊接著指定子域名
[root@iZbp11f8g5h7oozejqy6k6Z ~]# echo "[email protected]"|gawk '/^([A-Za-z0-9_\.\+\-]+)@([a-zA-Z0-9_\.]+)\.([a-zA-Z0-9_\.]+)$/p' w[email protected]