1. 程式人生 > >第四周作業(alias、grep、正則表示式、find命令的基本用法)

第四周作業(alias、grep、正則表示式、find命令的基本用法)

1.命令別名 alias的用法

通過alias命令實現:

(1)alias不帶任何選項將顯示當前shell下所有的可用的命令別名的資訊,其中,等號之前表示新的命令名稱,等號右邊表示的是要替代的命令及其引數。

(2)定義別名:

alias new_name='old_name options'

注:通過命令列定義的命令別名只對當前shell有效,如果想永久有效,需要定義在配置檔案中

僅對當前使用者有效,其配置檔案為:~/.bashrc

對所有使用者都有效的配置檔案為/etc/bashrc

 

 2. grep

grep基本介紹:

grep是一款文字過濾工具

作用:文字搜尋工具,根據使用者指定的“模式”對目標文字逐行進行匹配檢查,列印匹配到的行

模式:由正則表示式字元及文字字元所編寫的過濾條件

正則表示式:是由一類特殊字元及文字字元所編寫的模式,其中有些字元不表示字元字面的意思,而是表示控制或通配的功能

正則表示式分兩類:基本正則表示式和擴充套件正則表示式,其中grep支援正則基本正則表示式,egrep支援擴充套件正則表示式

grep語法:

grep [OPTIONS] PATTERN [FILES...]

             --color   高亮顯示匹配到的字串

             -v  :  顯示不能被匹配到的行

           -i    :   忽略字元大小寫

             -o  : 僅顯示匹配到的字串

        -q   :   靜默模式,不輸出任何資訊

基本正則表示式元字元:

字元匹配:

   . :匹配任意單個字元

  []  :匹配指定範圍內的任意單個字元

 [^]  : 匹配指定範圍外的任意單個字元

其中:[:alnum:]表示所有的字母和數字

   [:alpha:]表示所有的字母(不區分大小寫)

   [:dight:]表示所有的數字

   [:lower:]表示所有的小寫字母

   [:upper:]表示所有的大寫字母

   [:space:]表示所有的空白字元

   [:punct:]表示所有的標點符號

次數匹配:

用於在要指定的字元後面,用於指定前面的字元要出現的次數

* :匹配前面的的字元任意次,僅表示次數

.* : 表示任意長度的任意字元

\? :表示匹配前面的字元0次或1次,即前面的字元可有可無

\+ : 表示匹配前面的字元至少一次

\{m\} : 匹配前面的字元m次

\{m,n\} :表示匹配前面的字元至少mci,至多n次

\{0,n\} :表示匹配前面的字元至多n次

\{m,\} :表示匹配前面的字元至少m次

位置錨定:

對特定位置進行定位

^:行首錨定:用於模式的最左側

¥:行尾錨定:用於模式的最右側

^PATTERN :用於模式匹配整行

        ^$:空行,不含有空格的行

        ^ [:space:]*$:空行,包含有空格的行

  \<:詞首錨定,用於單詞匹配的左側

  \>:詞尾錨定,用於單詞匹配的右側

  \<PATTERN\>:匹配整個單詞

分組:分組是指將一個或多個字元捆綁在一起,當做一個整體來處理,其符號為: \(\)

例如:\(xy\)*ab:表示xy這個整體可以出現任意次

注:1 分組括號中的模式匹配到的內容會被正則表示式記錄在內部變數內,這些變數命名為:\1,\2,\3...

      \1:表示的是從左側起,第一個左括號以及與之匹配的右括號之間的模式所匹配到的字元

      2 後向引用:引用前面分組括號中的模式所匹配到的字元,而非模式本身

 

擴充套件正則表達

字元匹配:

[]  :匹配指定範圍內的任意單個字元 

[^]  : 匹配指定範圍外的任意單個字元

基本與基本正則表示式相同

次數匹配:

*:任意次

?:0次或1次

+ :至少1次

{m}:精確匹配m次

{m,n}:至少m次,至多nci

{m,}:至少m次

{0,n}:至多n次

錨定:與基本正則表示式相同

分組:():用括號括起來表示要引用的內容,不需要進行轉義

後向引用:\1,\2,\3

 

本週作業作業:

(1)定義一個對所有使用者都生效的命令別名,例如:lftps='lftp 172.168.0.1/pub'

演示:vim /etc/bashrc  在末行加上如下命令,並且加上註釋,重啟後生效

     

也可以通過bash程序重新讀取配置檔案:

source /path/to/config_file  或  ./path/to/config_file

    

(2)顯示 /etc/passwd檔案中不以 /bin/bash結尾的行

               grep -v "/bin/bash$"  /etcpasswd

             

           (3)顯示 /etc/passwd檔案中,包含2位數字或者三位數字的行

                      grep  "\<[0-9]\{2,3\}\>" /etc/passwd

            

 

     (4)顯示/proc/meminfo檔案中以大寫或小寫S開頭的行,用三種方式實現

                   

               (5)使用echo輸出一個絕對路徑,使用egrep取出路徑名,類似執行dirname /etc/passwd的結果

                  echo  "/etc/passwd" | egrep -o  "[^/]+/?$" | cut -d/ -f1

           

 

             (6) 找出ifconfig中的ip地址,要求結果只顯示ip地址

                  ifconfig | grep -o -E "\<["

(7)編寫指令碼,實現自動新增三個使用者,並計算這三個使用者的uid之和

         

(8)vim 定製自動縮排4個字元

在末行模式下輸入 set ai   就可以保證此行再輸入命令前縮進了4個字元,當設定了自動縮排後,按ENTER鍵時就會按照此行縮排字元自動縮排

(9)find用法以及常用用法:

find命令是在目錄層級結構中查詢符合條件的檔案,所以它可以同時查指定目錄及其子目錄。同時它還可以對搜尋結果執行一定的檔案處理操作。

命令語法:

find [選項] [查詢路徑]... [查詢條件] [處理操作]

其中:

(1)查詢路徑:預設值為當前路徑,路徑可有有多個,路徑之間以空格隔開

(2)查詢條件:

    -name "檔名稱”,支援萬用字元

    -iname  "檔名稱“ ,與name基本相同,但是它忽略字母大小寫

     -user  username 查詢指定使用者屬主的檔案,同樣還有-uid  UID

     -group  groupName查詢屬於指定組的檔案,同樣還有-gid   GID

      -type   filetype:根據檔案型別查詢,常用的型別為"f"普通檔案,"d"目錄檔案

      -size   [+|-]數字單位:常用單位為k、M、G,+號表示大於,-號表示小於等於,無符號則以10M為例,表示9M<檔案大小<=10M。

     -atime  [+|-]數字  :表示檔案的最後被訪問時間,以天為單位,+號表示大於等於天數+1,-號表示小於天數,無符號則以10為例,表示 10<=檔案最後訪問時間<11 。同樣還有-mtime表示檔案內容資料的最後修改時間,-ctime表示檔案的元資料的最後修改時間

    -amin表示檔案的最後被訪問時間,以分鐘為單位,規則與-atime一樣。同樣還有-mmin表示檔案內容資料的最後修改時間  和-cmin 表示檔案的元資料最後修改時間

    -perm [+|-]  MODE  表示根據檔案的訪問許可權為條件。

    -a表示前後兩個條件要同時滿足(與的關係)

    -o表示前後兩個條件滿足一個即可(或的關係)

    -not 或 !表示後面的條件取反。

(3)處理操作

    -print 顯示結果在螢幕上,這是預設操作

    -ls   對結果檔案使用ls -l 長格式顯示有螢幕上。

    -delete:  刪除查詢到的檔案

    -fls  /路徑/結果檔名 :  把結果以長格式資訊儲存到指定的檔案中

    -exec  命令 {}  \;   :表示對查詢到的檔案執行相應的命令,{}表示查詢到的檔案在命令中的佔位符。

    -ok   命令  {} \;     :與exec相同,但是對每個檔案進行操作前,會彈出提示資訊等使用者確認。

常用用法的例項演示如下:

$find  /etc -name hosts

在目錄/etc中查詢檔案hosts

$find  /  -size +204800

在根目錄下查詢大於100MB的檔案,size是以塊為單位,2塊=1K

$find   /tmp  -user  user1

在/tmp目錄下查詢所有者為user1的檔案

$ find  /etc  -cmin -5

在/etc下查詢5分鐘內被修改過屬性的檔案和目錄

$ find  /etc  -size  +163840  -a  -size -204800

在/etc下查詢大於80MB小於100MB的檔案

$ find  /etc  -name hosts  -exec  ls  -l {} \;