1. 程式人生 > 其它 >linux之centos運維kafka

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]