shell面試題整理

來源:互聯網
上載者:User

標籤:

1.給一個放有IP的檔案,其中一個IP一行,統計哪個IP出現的次數最多。

ip_input.txt內容如下:

219.217.49.14

175.43.4.87

87.48.98.1

59.73.38.25

219.217.50.14

59.92.48.32

219.217.49.14

59.72.38.142

59.73.38.25

219.217.49.14

 

用shell指令碼實現如下:

sort ip_input.txt | uniq -c | sort | tail -1 | awk ‘{print $2}’

 

命令拆解結果如下:

sort ip_input.txt:      sort ip_input.txt:|uniq -c                 175.43.4.87              1 175.43.4.87 219.217.49.14            3 219.217.49.14219.217.49.14            1 219.217.50.14219.217.49.14            1 59.72.38.142219.217.50.14            2 59.73.38.2559.72.38.142             1 59.92.48.3259.73.38.25              1 59.92.48.3259.73.38.25 59.92.48.32 87.48.98.1

 

解析:在uniq -c(要加上-c,否則不會顯示重複了多少次)之前要先排序,因為uniq是對連續的行進行檢查。最後要注意的是awk 要用單引號,因為如果用雙引號就會把$2解析掉為運行程式的第二個參數,用單引號就是原汁原味的awk用法,表示記錄的第二個欄位。

 

 

 

 

 

 

 

 

2.列印出sshd服務的連接埠號碼和進程號

首先觀察netstat -anp| grep sshd的結果

命令如下:root使用者

netstat -anp | grep sshd | sed -n ‘s/.*:::\([0-9]*\) .* \([0-9]*\)\/sshd/\1 \2/p’  

 

需要對第4行進行擷取解析,取出連接埠22和進程號7572

利用sed命令的替換功能,格式如下:

s/pattern/replacemen/flag

其中pattern為我們要替換的文本,使用Regex表示的匹配模式,

replacement為用來替換的由一般字元組成的字串。

flag為替換標誌,為p時,替換第1個符合規則的字串,並且將緩衝區輸出到標準輸出,g為全域匹配,會替換文本行中所有符合規則的字串,但沒有將緩衝區輸出到標準輸出。

 

由題意可知,我們可以把22和7572提取出來,然後替換掉第4行,所以列印第4行時只會列印22和7572.因為sed是一行一行讀地,所以其它行並不會輸出,因為它們沒有匹配。

sed -n ‘s/.*:::\([0-9]*\) .* \([0-9]*\)\/sshd/\1 \2/p’

其中-n把預設輸出給禁止了,sed預設是輸出所有文本地,主要說下Regex,這裡在:::前面加上.*是為了把前面tcp 0 0 給包括進來到pattern這個Regex內,然後在\([0-9]*\)後面要加上一個空格後再加.*,才能把整個22做為一個整體後面用/1來引用,如果沒有.*,則後面引用/1時會變為空白。所以這裡在用.*的時候,前一個字元要加上去,這裡的前一個字元是空格符。\(這裡的\是為了轉義,

後面的\1 \2在這裡表示22 7572

 

 

 

 

3.統計文本中出現某個單詞的次數

檔案為ip_input.txt,這個檔案是在之前的ip_input.txt的基礎上添加多了一些字母,為了大寫字母混用,加上符號,所以特意添加地,字元‘4’有18個

219.217.49.14 

175.43.4.87 

87.48.98.1 

59.73.38.25 

219.217.50.14 

59.92.48.32 

219.217.49.14 DF,SDF4SD,SDFad4sdf 

59.72.38.142 

59.73.38.25  dsaf4asdf as4e  

219.217.49.14 219.217.49.14219.217.49.14 219.217.49.14

 

命令如下:

cat ip_input.txt | tr -c “[:alnum:]” “\n” | grep -c 4

 

思路如下:

因為grep的-c選項只有統計某個單詞出現的行數,所以必須把每個單詞放一行,這就需要用到替換命令tr,利用tr把除了字母和數字之外的其它字元都用\n,即分行符號替代。

tr命令文法如下:

tr [option]  set1 [set2]

option選項如下所列:

-c:用字元集set2替換字元集set1中沒有包含的字元。這裡set1我們用[:alnum:],[:alnum:]表示所有字母字元與數字。 set2是\n。

-d:刪除字元集set1中重複的字元,不執行操作。

-s: 壓縮set1中重複的字元,去重。

-t:將字元集set1用set2轉換。

 

擴充:如果是統計字元出現的次數,則需改為

more tt.txt|tr -sc [:alnum:] ‘\n’|sed ‘s/value/value\n/g’|grep -c value

注意:如果想把它封裝成一個.sh檔案,如my.sh則需

more $2|tr -sc [:alnum:] ‘\n’|sed “s/$1/$1\n/g”|grep -c $1,

直接./mysh value tt.txt,結果為7

注意:sed中要用雙引號才行,如果用單引號,則$1就不是指value,因為在單引號裡用的sed命令的規則,而不是shell的規則。

[[email protected] my]# more tt.txt 
valuevaluevalue
value
valueasf
value 

shell面試題整理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.