Shell命令學習筆記

來源:互聯網
上載者:User

Shell命令學習筆記

  1. tr 替換字元

  簡單樣本: tr 'A' 'a' < file.txt

  把每一個A字元替換為a字元。tr命令只能用於單個字元的替換,如果寫成:

  tr 'ABC' 'abc' < file.txt

  則表示分別把A,B,C字元替換為a,b,c,而不是把字串ABC替換為abc,字串的替換需要用到sed命令,稍候會有介紹。

  2. grep 字串尋找

  簡單樣本 :grep world file.txt

  在輸入檔案或這標準輸入中尋找含有匹配字串(此處是world)的行,並顯示改行。

  用grep處理後的結果往往會成為後續處理的輸入,所以可以用管道進行串連:

  grep world file.txt | wc -l

   wc -l表示統計行數,上述命令表示統計file.txt檔案中含有world字串的行數。

  上述命令等於 grep -c world file.txt

  匹配多個條件,條件之間為或關係:

  grep 'a\|b' file.txt

  尋找file.txt檔案中所有含有a或者b的行

  如果需要顯示不匹配模式的行,則只需要加-v 選項。

  3. sed(Stream Editor),流編輯器,一般用於執行文本替換。

  Sed是以批處理而不是互動的方式來編輯檔案,sed並不會修改源檔案,只會把修改的結果發送到標準輸出或者寫入另外一個檔案。

  簡單樣本:sed 's/world/hadoop/' < file.txt

  把每行中的第一個world替換成hadoop。

  命令中引號內開頭的s表示要執行替換,sed的用途很多,但是一般用於文本替換。

  主要選項:

  -e 當需要有多個不同的替換時,每個替換命令必須以-e開頭:sed -e 's/world/hadoop/' -e 's/hello/hallo/' < file.txt

  -f 當命令比較複雜時,可以把sed命令寫入一個指令檔(檔案中的命令不要加單引號),然後執行sed命令時只需用-f指向該指令檔即可:sed -f sed.txt < file.txt

  -n 預設sed會把源檔案的修改結果發送到標準輸出(無論是否經過替換,都會發送),選項-n關閉該功能。-n一般和p組合使用,表示只列印替換過的行,其餘的行不列印:sed -n 's/world/hadoop/p' < file.txt

  sed命令除了可以以p結尾之外,還可以以g結尾: sed 's/world/hadoop/g',表示全域替換,亦即對每行中所有匹配的文本進行替換,而不是僅僅替換第一個。

  sed命令以數字結尾表示替換每行的第n個匹配字串: sed 's/world/hadoop/2'

  應用:

  刪除文本中所有空行:sed '/^$/d' file.txt

 4. cut 選定欄位

  cut用來剪下文字檔裡指定的欄位,欄位是指以定界符分隔的字串,常見的分隔字元有空格,定位字元以及冒號。

  簡單樣本:

  cut -d : -f 1,5 /etc/passwd

  剪取/etc/passwd檔案的第1,5個欄位(欄位從1而不是0開始標號),定界符為冒號。

  5. sort  排序工具

  sort將輸入的每行看做一條記錄,每條記錄由多個欄位組成,欄位間以空白字元為間隔。

  簡單樣本:

  sort -t: -k1,1 /etc/passwd

  以:為間隔符,以第一個欄位為排序欄位對檔案中的記錄進行排序

  可以制定排序索引值欄位的類型,比如:

  sort -t: -k1,1nr /etc/passwd

  n是指把排序欄位當做數值而不是字串進行比較,如果指定了n,則2排在10前面,否則10排在2前面。

  r是指逆序

  其他常用的的排序索引值欄位類型為:

  b 忽略開頭的空白

  f 不區分大小寫

  另外,如果k後唯寫了一個數字,比如-k2,則意味著排序索引值為第二個欄位及其以後的所有欄位,而不僅僅是第二個欄位,如果只想用第二個欄位作為排序索引值,則應該使用-k2,2。

  當出現多個-k選項時,意味著首先用第一個k選項指定的索引值進行排序,然後對第一個索引值相同的一組記錄使用第二個索引值排序,以此類推。

  最後,sort的排序是不穩定的。

  6. wc WordCount工具

  wc用來進行計數:

  wc -c file.txt 統計位元組數

  wc -w file.txt 統計單詞數

  wc -l file.txt 統計行數

  如果不指定任何選項,則是依次輸出行數,單詞數,位元組數。

  7. head tail  取得檔案開頭或者結尾數行

  head -n file.txt 輸出檔案的前n行

  tail -n file.txt  輸出檔案的後n行

  tail -n -f file.txt  輸出檔案的後n行,在檔案有新的資料加入時顯示新的資料(對查看log檔案非常有用)

  8. Uniq 重複資料刪除

  用例子說明,設檔案file.txt內容為:

a 1b 1c 2d 2e 3

  則執行uniq -f 1 file.txt的結果為

a 1c 2e 3

   執行uniq -u -f 1 file.txt的結果為

   e 3

  9. split 切分檔案

  split -l 100 file.txt 把檔案file.txt按照100行為單位切分成數個檔案,切分後的檔案命名為xaa,xab,...

  split -b 200k file.txt 把檔案file.txt按照200KB為單位進行切分,切分後的檔案命名為xaa,xab,...

  參考文獻:

[1] 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.