linux基礎之正則表達式

正則

正則表達式

作用:用來進行行文本匹配的工具[grep、sed、awk、vim、less、nginx、varnaish]
基本正則匹配選項必須用”“起來:
  • <^> 匹配字符串的開始
  • <$> 匹配字符串的結束。
  • <.>匹配除了換行符任意字符
  • <+> 匹配重復1次或更多次
  • <?>重復0次或1次
  • {n} 重復n次
  • {n,} 重復n次或更多次
  • {n,m} 重復n到m次
  • \<或者\b 詞首錨定 >或者\b詞尾錨定
  • (xxx) 分組:將一個或多個字符綁定在一起進行處理注意匹配到的(內容而非正則本身)會被正則表達式引擎記錄與內部變量中,可被后續調用\1,\2
  • | 或者:a|b a或b
  • [:alnum:] 字母和數字
  • [:alpha:] 任何大小寫字符A-Z a-z
  • [:digit:] 十進制數[:xdigit:] 十六進制
  • [:lower:] 小寫字母 [:upper:] 大寫字母
  • [:blank:] 空白字符(空格和制表符)
  • [:space:] 水平和垂直的空白字符
  • [:punct:] 標點符號
  • [任意要匹配的字符] 會遞歸取出
注意:通配符不支持[:xxx:]這種格式
擴展正則:匹配選項必須用”“起來
  • <\b>單詞的開頭或結尾,單詞的分界處。舉例:hi后面跟著lucy,\bhi\b.*\blucy\b \bx{n次}\b
  • <*>匹配任意次0次或多次,前面的內容可以連續重復使用任意次以使整個表達式得到匹配
  • <\d>匹配一位數字,為了避免重復可以使用\d{n}必須連續重復n次–只有python正則支持
  • <\w> 匹配字母或數字或下劃線或漢字。
  • <\s> 匹配任意的空白符-
  • <^> 匹配字符串的開始
  • <$> 匹配字符串的結束。
  • <.>匹配除了換行符任意字符
  • <+> 匹配重復1次或更多次
  • <?>重復0次或1次
  • {n} 重復n次
  • {n,} 重復n次或更多次
  • {n,m} 重復n到m次
  • [任意要匹配的字符] 會遞歸取出
注意:與基本正則基本相同,只不過一些特殊符號不用再使\進行轉義,當然有些特例:單詞錨定和分組的后向引用仍需要\b \< \1.

舉例&作業:
Windows\d+匹配Windows后面跟1個或更多數字
匹配電話號碼:雖然可以匹配到,但是有一部分不是我們想要的結果所以可以用下面的分支條件來解決
[root@station88 src]# egrep ‘\(?[0-9]{3}[)-]?[0-9]{8}’ test.txt
233-39432434
(010)66513114
022-22333434
010)12345678
(022-66513115
作業:
1、顯示三個用戶root、mage、wang的UID和默認shell
[root@localhost lee]# cut -d: -f1,3,7 –output-delimiter = /etc/passwd|egrep “root|mage|wang”
root=0=/bin/bash
mage=515=/bin/bash
wang=516=/sbin/nologin
2、找出/etc/rc.d/init.d/functions文件中行首為某單詞(包 括下劃線)后面跟一個小括號的行
[root@localhost lee]# egrep “^[[:alpha:]].*[[:punct:]]*\(\)” /etc/rc.d/init.d/functions
fstab_decode_str() {
checkpid() {
daemon() {
killproc() {
pidfileofproc() {
pidofproc() {
status() {
echo_success() {
echo_failure() {
echo_passed() {….
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
[root@localhost lee]# echo /etc/rc.d/init.d/functions |egrep -o “\b[[:alpha:]]*\b$”
functions
4、使用egrep取出上面路徑的目錄名
[root@localhost lee]# echo /etc/rc.d/init.d/functions |egrep -o “([[:punct:]]).*\1”
/etc/rc.d/init.d/
5、統計last命令中以root登錄的每個主機IP地址登錄次數
[root@localhost lee]# last |grep “root” |tr -s ” “|cut -d\ -f1,3 |sort |uniq -c|sort -nr
26 root 192.168.162.1
4 root :0.0
3 root pxe31.magelinux.
2 root pxe73.magelinux.
2 root :0
1 root 172.16.253.31
1 root 172.16.252.41
1 root 172.16.252.1
6、利用擴展正則表達式分別表示0-9、10-99、100-199、 200-249、250-255
#echo {1..255} > 1.txt
#egrep -o “\b[0-9]\b” 1.txt
#egrep -o “\b[0-9]{2}\b” 1
#egrep -o “\b[0-9]{2}\b” 1 |less
#egrep -o “\b1[0-9]{2}\b” 1 |less
#egrep -o “\b2[0-4][0-9]\b” 1 |less
#egrep -o “\b25[0-5]\b” 1 |less
7、顯示ifconfig命令結果中所有IPv4地址
8、將此字符串:welcome to magedu linux 中的每個字符 去重并排序,重復次數多的排到前面
[root@localhost lee]# echo “welcome to magedu linux”|egrep -o “[[:alpha:]]”|sort|uniq -c|sort -nr
3 e
2 u
2 o
2 m
2 l
1 x
1 w
1 t
1 n
1 i
1 g
1 d
1 c
1 a
分支條件:
如果滿足其中任意一種規則都應當成功匹配,使用方法用|把不同的規則分隔開。
[root@station88 src]# egrep ‘\([0-9]{3}\)[0-9]{8}|^[0-9]{3}-[0-9]{8}’ test.txt
233-39432434
(010)66513114
022-22333434
分組:過濾ip地址(搞定部分)
ifconfig eth0|egrep -o “([0-1][0-9][0-9]|2[0-5][0-4])\.([0-1][0-9][0-9]|2[0-5][0-4])\.([0-1][0-9][0-9]|2[0-5][0-4])\.([0-1][0-9][0-9]|2[0-5][0-4])”(分組引用為匹配結果的引用而非規則本身)
簡化:ifconfig eth0|egrep -o “([0-1][0-9][0-9].|2[0-5][0-4].){3}[0-1][0-9][0-9]|2[0-5][0-4]”
反義:
* \W匹配任意不是字母數字下劃線漢字的字符。
* \S匹配任意不是空白符的字符
* \D匹配任意非數字的字符
* \B匹配不是單詞開頭或結束的位置
* [^x]匹配除了x以外的任意字符
* [^aeiou]匹配除了aeiou這幾個字母以外的任意字符。
* 舉例:
* [root@station88 src]# egrep ‘^[^0-9].*[^0-9]$’ test.txt
* h,hihihihihiLucy
* iiiiiii
向后引用:
* 使用()指定一個分組后,默認分組會自動擁有一個組號,1….
* 向后引用用于重復搜索前面某個分組匹配的文本。\1匹配分組1
* 例如:\b(w+)\b\s+\1\b 可匹配重復的單詞go go go
* 也可以指定表達式的組名。(?<world>\w+)=(?’world’\w+),將祖名指定為world–實驗失敗
斷言:
* 概念:像\b,^,$這樣用于指定一個位置,這個位置滿足一定過的條件。

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/86949

(5)
Thunk_LeeThunk_Lee
上一篇 2017-09-11 18:16
下一篇 2017-09-11 21:04

相關推薦

  • Linux 基礎(6)—— 權限

    修改所屬人,所屬組                文件的 r w x 權限            修改文件的權限chmod          umask &nb…

    2017-07-27
  • 編譯安裝apache

    編譯安裝apache可簡單分為3步: 第一步:下載apache軟件包解決依賴關系并生成Makefile 1.首先準備開發環境,可以通過yum安裝開發包組:yum groupinstall Development Tools 2.準備apache軟件包,可以通過http://httpd.apache.org下載到本地。隨后解包tar -xf?httpd-2.4…

    Linux干貨 2017-12-03
  • 通過view實現智能DNS

    DNS策略解析最基本的功能是可以智能的判斷訪問您網站的用戶,然后根據不同的訪問者把您的域名分別解析成不同的IP地址,然后跟DNS服務器內部的IP表匹配一下,看看用戶的類型,然后給用戶返回對應的IP地址。

    Linux干貨 2017-10-03
  • 03葵花寶典之linux用戶

    介紹了linux上有關用戶和組的相關命令及配置文件

    2018-03-16
  • linux文件系統

      ?文件系統: linux區分大小寫: ? ? ? ? ? ? ? ? ? ?標準的linux文件系統xfs ext(如ext4),嚴格區分大小寫,例:MAIL,Mail,mail;而windows是不那么敏感的。 這是因為文件系統的格式不同。比如:U盤的Fat32在linux中是vfat文件系統就可不區分大小寫 不同文件系統,下面顯示一個隱藏文…

    Linux干貨 2017-11-19
  • 第七周

    1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; 第一步先在磁盤上創建分區:fdisk /dev/sdc n –> e –> 5 –> default &#…

    Linux干貨 2017-05-18

評論列表(2條)

  • h
    h 2017-09-13 10:59

    記錄內容不錯,可以對不記得的內容做一個備注,為了更好的復習。

  • 婭娃愛
    婭娃愛 2017-11-06 13:26

    給一個大的贊,治好了我多年的正則恐懼癥!

欧美性久久久久