Linux學習十七 正規表示式練習題

2022-07-03 13:54:09 字數 1688 閱讀 9583

我們簡單的以搜尋星號 (*) 來處理底下的任務:

利用正規表示法找出系統中含有某些特殊關鍵字的檔案,舉例來說,找出在 /etc 底下含有星號 (*) 的檔案與內容:

解決的方法必須要搭配萬用位元組,但是星號本身就是正規表示法的字元,因此需要如此進行:

[root@www ~]# grep '\*' /etc/*

你必須要注意的是,在單引號內的星號是正規表示法的字元,但我們要找的是星號,因此需要加上跳脫字元 (\)。但是在 /etc/* 的那個 * 則是 bash 的萬用位元組! 代表的是檔案的檔名喔!不過由上述的這個結果中,我們僅能找到 /etc 底下第一層子目錄的資料,無法找到次目錄的資料, 如果想要連同完整的 /etc 次目錄資料,就得要這樣做:

[root@www ~]# grep '\*' $(find /etc -type f)

但如果檔案數量太多呢?如同上述的案例,如果要找的是全系統 (/) 呢?你可以這樣做:

[root@www ~]# grep '\*' $(find / -type f)

-bash: /bin/grep: argument list too long

真要命!由於命令列的內容長度是有限制的,因此當搜尋的物件是整個系統時,上述的命令會發生錯誤。那該如何是好? 此時我們可以透過管線命令以及 xargs 來處理。舉例來說,讓 grep 每次僅能處理 10 個檔名,此時你可以這樣想:

先用 find 去找出檔案;

用 xargs 將這些檔案每次丟 10 個給 grep 來作為引數處理;

grep 實際開始搜尋檔案內容。

所以整個作法就會變成這樣:

[root@www ~]# find / -type f | xargs -n 10 grep '\*'

從輸出的結果來看,資料量實在非常龐大!那如果我只是想要知道檔名而已呢?你可以透過 grep 的功能來找到如下的引數!

[root@www ~]# find / -type f | xargs -n 10 grep -l '\*'

情境模擬題二:使用管線命令配合正規表示法建立新命令與新變數。我想要建立乙個新的命令名為 myip , 這個命令能夠將我系統的 ip 捉出來顯示。而我想要有個新變數,變數名為 myip ,這個變數可以記錄我的 ip 。

處理的方式很簡單,我們可以這樣試看看:

首先,我們依據本章內的 ifconfig, sed 與 awk 來取得我們的 ip ,命令為:

[root@www ~]# ifconfig eth0 | grep 'inet addr' | \

> sed 's/^.*inet addr://g'| cut -d ' ' -f1

再來,我們可以將此命令利用 alias 指定為 myip 喔!如下所示:

[root@www ~]# alias myip="ifconfig eth0 | grep 'inet addr' | \

> sed 's/^.*inet addr://g'| cut -d ' ' -f1 "

最終,我們可以透過變數配置來處理 myip 喔!

[root@www ~]# myip=$( myip )

如果每次登陸都要生效,可以將 alias 與 myip 的配置那兩行,寫入你的 ~/.bashrc 即可!

簡答題部分:

Puppet正規表示式 十七

puppet支援標準的ruby正規表示式.正規表示式的引數匹配項 用於描述範圍 如 a z 表示範圍a z之間.用於包含正規表示式.w 用於描述字母或數字,相當於 0 9a za z w 非字母或數字.s 匹配 t n r f 其中 t 為製表符 r 為回車符 n 為換行符 f 為換頁符,s表示匹配...

linux 正規表示式學習

出處 正規表示式 指乙個用來描述或者匹配一系列符合某個句法規則的字串的單個字串。通常被用來檢索和替換那些符合某個模式的文字內容。支援利用正規表示式進行字串操作。grep sed awk都是針對文字的行才操作的 表示零個或多個任意字元,空行也包含在內。在正規表示式中,表示行的開始,表示行的結尾。0 9...

linux學習 正規表示式

特殊字元 alnum 代表英文大小寫字元及數字,即0 9,a z,a z alpha 代表任何英文大小寫字元,即a z,a z digit 代表數字而已,即0 9 upper 代表大寫字元,即a z lower 代表小寫字元,即a z blank 代表空格鍵與 tab 按鍵 cntrl 代表鍵盤上面...