1.1. 取出最近訪問的5個普通文件,并要求輸出文件名和最后的訪問時間
執行命令:
$ls –lut|grep “^-”|head -5|cut –c41-
解析:-t表示ls命令在輸出時會按修改時間來排序;-u表示ls –l命令顯示出文件的最后訪問時間;”^-”是正則表達式,表示以橫桿字符’-’起始的行;通過cut命令把無關信息刪除,選項-c指定了cut命令會保留并輸出那些字符。
選項-c有兩種指定參數的方式:一種是通過橫桿字符’-’指定一個范圍;另一種是通過逗號連接多個范圍。范圍有如下一些指定的方式:
范圍 | 描述 |
N | 第N個字符 |
N- | 從第N個字符一直到當前行結束 |
N-M | 從第N個字符一直到第M個字符 |
-M | 從第一個字符一直到第M個字符 |
1.2. 假如有兩個文件name.txt和tel.txt,它們分別記錄了員工的姓名和電話號碼,如果希望把兩個文件中的用戶名和電話號碼一一對應起來,該如何操作?
案例:
name.txt內容如下:
MattiAarnioDragosAcostachioaieMarkAdlerMonalisaAgrawal
tel.txt內容如下:
555-0542555-1234555-1256555-2345555-3456555-4567555-5678555-6789
命令執行:
$paste –d’:’ name.txt tel.txt|cat -n
1.3. 檢查當前系統中的各種Shell程序,統計出它們各被多少個用戶使用,并把統計結果按照從多到少的順序打印出來。
執行命令:
$cat /etc/passwd | cut –d: -f7|sort|uniq –c|sort –nr
解析:選項-f7表示每行的第7個字段;uniq –c是合并統計;sort –nr 選項-n表示按照數字的大小排序,選項-r表示從大到小顯示結果。
1.4. 統計文本文件中各個單詞出現的個數
案例:
#!/bin/bash#定義函數count,用來統計一個文件中的字數count(){ #函數需要一個參數才可以正確調用if [$# !=1]then echo " Need one file parameter to work!"exit 1;fi#刪除標點符號和特殊字符#構建一個很長的管道命令,每一段都單獨寫在一行中,增加可讀性tr '+-=*.;:{}!?<>"/n/t''' < $1 |/#把所有大寫字母轉換為小寫字母tr 'A-Z' 'a-z'|/#把連續重復的空格符替換為一個空格符tr -s ''|/#把空格符轉換為換行符tr '' '/n'|/#把相同的單詞放到一起sort|/#刪除重復單詞,并進行統計uniq -c|/#根據重復的次數進行排序sort -rn}echoecho "This script can count Words of a specified file."#使用空命令冒號構建循環while :do read -p "Enter the file path(or quit):"case "$REPLY" in [QQ]|[Qq][Uu][Ii][Tt]) echo " Bye." #在輸入大、小寫quit時,退出 echo "$REPLY" exit 0 ;;*) #判斷輸入的是一個可讀的普通文件,并且內容不為空 if [ -f "$REPLY" ] && [ -r "$REPLY" ] && [ -s "$REPLY" ] then #當用戶輸入一個合法文件時 #調用count函數統計文件的單詞個數 count "$REPLY" else #如果輸入了非法文件,顯示不能處理它 echo "$REPLY can not be dealed with." fi ;;esacdoneexit 0
語法:
tr [option] .. SET1 [SET2] --SET1會被SET2替換
1.5. 所有特殊字符替換
省略
1.6. 把TAB轉換成空格符,且保證其他字符的位置不變
#cat命令的選項-T將把TAB字符顯示為^I
$cat –T TABS.txt
#使用expand命令把TAB字符替換為空格
$expand TABS.txt | cat -T
1
2
2.1 windows系統的文件與linux系統的文件之間進行轉換
在Ubuntu Linux系統中,可以安裝tofrodos包,使用其中的fromdos命令和todos命令來轉換文本文件。
2.2 求一個字符串的長度
exPR length STRING
2.3 把某些命令的輸出格式化成一個表格
$(printf “PERMISSIONS LINKS OWNER GROUP SIZE DATE HH:MMFILE-NAME/n”;ls –l|sed 1d)|column –t
解析:命令ls –l|sed 1d輸出當前目錄下的文件列表,其中ls命令的輸出經過管道傳遞給sed 1d命令進行處理,目的是刪除目錄列表中的第一行。
新聞熱點
疑難解答