Linux学习十七、正规表达式练习题
生活随笔
收集整理的這篇文章主要介紹了
Linux学习十七、正规表达式练习题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
- 情境模擬題一:透過 grep 搜尋特殊字串,并配合數(shù)據(jù)流重導(dǎo)向來處理大量的文件搜尋問題。
- 目標(biāo):正確的使用正規(guī)表示法;
- 前提:需要了解數(shù)據(jù)流重導(dǎo)向,以及透過子命令 $(command) 來處理檔名的搜尋;
我們簡單的以搜尋星號 (*) 來處理底下的任務(wù): - 利用正規(guī)表示法找出系統(tǒng)中含有某些特殊關(guān)鍵字的文件,舉例來說,找出在 /etc 底下含有星號 (*) 的文件與內(nèi)容:
解決的方法必須要搭配萬用字節(jié),但是星號本身就是正規(guī)表示法的字符,因此需要如此進(jìn)行:
你必須要注意的是,在單引號內(nèi)的星號是正規(guī)表示法的字符,但我們要找的是星號,因此需要加上跳脫字符 (\)。但是在 /etc/* 的那個 * 則是 bash 的萬用字節(jié)! 代表的是文件的檔名喔!不過由上述的這個結(jié)果中,我們僅能找到 /etc 底下第一層子目錄的數(shù)據(jù),無法找到次目錄的數(shù)據(jù), 如果想要連同完整的 /etc 次目錄數(shù)據(jù),就得要這樣做:[root@www ~]# grep '\*' /etc/* [root@www ~]# grep '\*' $(find /etc -type f) - 但如果文件數(shù)量太多呢?如同上述的案例,如果要找的是全系統(tǒng) (/) 呢?你可以這樣做:
真要命!由於命令列的內(nèi)容長度是有限制的,因此當(dāng)搜尋的對象是整個系統(tǒng)時,上述的命令會發(fā)生錯誤。那該如何是好? 此時我們可以透過管線命令以及 xargs 來處理。舉例來說,讓 grep 每次僅能處理 10 個檔名,此時你可以這樣想:[root@www ~]# grep '\*' $(find / -type f) -bash: /bin/grep: Argument list too long - 先用 find 去找出文件;
- 用 xargs 將這些文件每次丟 10 個給 grep 來作為參數(shù)處理;
- grep 實(shí)際開始搜尋文件內(nèi)容。
- 從輸出的結(jié)果來看,數(shù)據(jù)量實(shí)在非常龐大!那如果我只是想要知道檔名而已呢?你可以透過 grep 的功能來找到如下的參數(shù)!
[root@www ~]# find / -type f | xargs -n 10 grep -l '\*' - 情境模擬題二:使用管線命令配合正規(guī)表示法創(chuàng)建新命令與新變量。我想要創(chuàng)建一個新的命令名為 myip , 這個命令能夠?qū)⑽蚁到y(tǒng)的 IP 捉出來顯示。而我想要有個新變量,變量名為 MYIP ,這個變量可以記錄我的 IP 。
處理的方式很簡單,我們可以這樣試看看: - 首先,我們依據(jù)本章內(nèi)的 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 即可!
所以整個作法就會變成這樣:
| [root@www ~]# find / -type f | xargs -n 10 grep '\*' |
簡答題部分:
- 我想要知道,在 /etc 底下,只要含有 XYZ 三個字節(jié)的任何一個字節(jié)的那一行就列出來,要怎樣進(jìn)行? grep [XYZ] /etc/*
- 將 /etc/termcap 內(nèi)容取出后,(1)去除開頭為 # 的行 (2)去除空白行 (3)取出開頭為英文字母的那幾行 (4)最終統(tǒng)計(jì)總行數(shù)該如何進(jìn)行? grep -v '^#' /etc/termcap | grep -v '^$' | grep '^[[:alpha:]]' | wc -l
- 或
-
grep?-v?'^[#$]'?/etc/termcap?|?grep?'^[a-zA-Z]'?|?wc?-l
總結(jié)
以上是生活随笔為你收集整理的Linux学习十七、正规表达式练习题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【SICP练习】22 练习1.28
- 下一篇: CSS 实现按钮及线呼吸灯效果