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

相關推薦

  • Raspberry pi設置自動撥號,搭建無線路由環境

    Raspberry pi設置自動撥號,搭建無線路由環境 前言  raspberry pi(樹莓派), 是一款針對電腦業余愛好者、教師、小學生以及小型企業等用戶的迷你電腦,由于可以燒錄Linux操作系統,因此可以衍生出各種各樣的使用途徑,諸如控制版,爬蟲機器,個人vps,門禁系統…..本文主要介紹如何在raspberry pi上面完成pppoe撥號上…

    2017-03-28
  • htop/vmstat/dstat/ps命令的使用

    Linux htop/vmstat/dstat/ps命令的使用 htop命令 htop工具在系統光盤這中是沒有的,所以要下載的小伙伴們要自己創建yum倉庫通過epel 安裝 創建yum倉庫 vim /etc/yum.repos.d/epel.repo [epel] name=Fedora EPEL baseurl=https://mirrors.tuna.t…

    2017-08-28
  • 學習筆記–權限管理

    文件系統的權限管理 1、Linux系統下每個目錄或文件的權限對象主要分為:屬主(u)、屬組(g)、其他用戶(o),針對每類訪問對象都定義了三種權限:讀(r)、寫(w)、執行(x),這三種權限針對目錄和文件的作用各不相同,以下將做詳細說明: 對于文件來說: 讀(r)權限:可以使用文本查看類工具讀取文件內容 寫(w)權限:可以修改文件內容,但不能刪除文件本身 執…

    Linux干貨 2016-08-05
  • 用戶和組的管理

    通過命令、passwd和shadow的格式,講述了用戶和組的管理

    Linux干貨 2017-12-17
  • 手動自制Mini Linux

        linux系統內核非常的精簡,而且基于一切皆文件的思想,使得我們可以再現有系統上掛載一個空硬盤,利用現有系統編譯一個內核和相關程序文件并拷貝到空硬盤上。我們就可以用空硬盤來單獨運行一個精簡的linux系統,這對于依賴于注冊表的windows系統來說是不可能實現的。本文簡要介紹一下一個mini linux的安裝制…

    Linux干貨 2016-05-03
  • 相關練習

    1、請使用命令行展開功能來完成以下練習:    (1)、創建/tmp目錄下的:a_c, a_d, b_c, b_d  mkdir /tmp/{a,b}_{c,d}    (2)、創建/tmp/mylinux目錄下的:  mkdir -pv /tmp/mylinux/{bin,boot/grub,de…

    Linux干貨 2016-11-05

評論列表(2條)

  • h
    h 2017-09-13 10:59

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

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

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

欧美性久久久久