next up previous
Next: 正規表示法 Up: 資料導向與管線處理 Previous: 資料流重導向

管線命令 (pipe)

練習題

  1. 如何使用管線命令,以 ls 指令輸出 /home/csie 內容後,其被 more 讀取?
    Sol. ls /home/csie | more
  2. 如何使用管線命令,以 echo $PATH 指令輸出 PATH 路徑後,再以指令 cut 切出 其第三個路徑?
    Sol. echo $PATH | cut -d ':' -f 3
  3. 如何使用管線命令,以 echo $PATH 指令輸出 PATH 路徑後,再以指令 cut 切出 其第二及五個路徑?
    Sol. echo $PATH | cut -d ':' -f 2,5
  4. 如何使用管線命令,將 export 指令輸出,用 cut 切出每行的第 12 字元以後的所有字串?
    Sol. export | cut -c 12-
  5. 如何使用管線命令,將 ls -al 指令輸出,用 cut 切出每行的第 10 至 22 字元?
    Sol. ls -al | cut -c 10-22
  6. 如何使用管線命令,將 last 指令輸出,用 grep 取出出現 root 的那一行?
    Sol. last | grep 'root' (root, "root"亦可)
  7. 如何使用管線命令,將 last 指令輸出,用 grep 取出沒有出現 root 的那一行?
    Sol. last | grep -v 'root' (root, "root"亦可)
  8. 如何使用管線命令,將 last 指令輸出,用 grep 取出出現 root 的那一行並計算找到的次數?
    Sol. last | grep -c 'root' (root, "root"亦可)
  9. 如何使用管線命令,將 last 指令輸出,用 grep 取出出現 root (忽略大小寫的不同) 的那一行?
    Sol. last | grep -i 'root' (root, "root"亦可)
  10. 如何使用管線命令,將 last 指令輸出,用 grep 取出出現 root 的那一行並輸出行號?
    Sol. last | grep -n 'root' (root, "root"亦可)
  11. 如何使用管線命令,將 last 指令輸出,用 grep 取出出現 root 的那一行並且用 cut 僅取第一欄?
    Sol. last | grep 'root' | cut -d ' ' -f1 (root 不加引號及加雙引號亦可)
  12. 如何使用管線命令,找出 /etc/issue 下出現 Mandrake 的那一行?
    Sol. cat /etc/issue | grep 'Mandrake' (Mandrake 不加引號及加雙引號亦可)
  13. 如何使用管線命令,找出 /etc/issue 下沒有出現 Mandrake 的那一行?
    Sol. cat /etc/issue | grep -v 'Mandrake' (Mandrake 不加引號及加雙引號亦可)
  14. 如何使用管線命令,在 cat /etc/group 的輸出訊息中,只要有 sshd 就取出,並且僅取第一欄及第三欄?
    Sol. cat /etc/group | grep 'sshd' | cut -d ':' -f1,3 (sshd 不加引號及加雙引號亦可)
  15. 如何使用管線命令,在 cat /etc/passwd 的輸出訊息中,以第三欄進行帳號排序?
    Sol. cat /etc/passwd | sort -t ':' -k 3
  16. 如何使用管線命令,在 cat /etc/passwd 的輸出訊息中,以第三欄且以數字進行帳號排序?
    Sol. cat /etc/passwd | sort -t ':' -k 3 -n
  17. 如何使用管線命令,將 last 指令輸出,僅取帳號並加以排序?
    Sol. last | cut -d ' ' -f1 | sort
  18. 如何使用管線命令,將指令 cat /etc/fstab 輸出,切下其第二欄並排序?
    Sol. cat /etc/fstab | cut -d ' ' -f2 | sort
  19. 如何使用管線命令,將 last 指令輸出,僅取帳號並加以排序,且相同的帳號僅出現一行?
    Sol. last | cut -d ' ' -f1 | sort -u 或 last | cut -d ' ' -f1 | sort | uniq
  20. 如何使用管線命令,將 last 指令輸出,僅取帳號並加以排序,且相同的帳號僅出現一行並計算每個帳號的登入總次數?
    Sol. last | cut -d ' ' -f1 | sort | uniq -c
  21. 如何使用管線命令,計算 /etc/man.config 有多少字、行、字元數?
    Sol. cat /etc/man.config | wc
  22. 如何使用管線命令,以一行指令串取得登入系統的總人次?
    Sol. last | grep [a-zA-Z] | grep -v 'wtmp' | wc -l
  23. 如何使用雙向重導向命令,將 last 指令輸出存一份到 last.list 檔案中,而螢幕上僅秀出帳號?
    Sol. last | tee last.list | cut -d ' ' -f1
  24. 如何使用雙向重導向命令,將 ls /home 的資料累加到 /homefile ,同時螢幕也以 more 輸出訊息?
    Sol. ls /home | tee -a /homefile | more|
  25. 如何使用管線命令,將 last 輸出的訊息中,所有的小寫變成大寫字元?
    Sol. last | tr '[a-z]' '[A-Z]'
  26. 如何使用管線命令,將 cat /etc/passwd 輸出的訊息中,所有的冒號 (:) 刪除?
    Sol. cat /etc/passwd | tr -d ':'
  27. 如何使用管線命令,將 cat /etc/passwd 輸出的訊息中,所有的重複字元 p 取代成單一個 q 字元?
    Sol. cat /home/csie/txtfile | tr -s 'p' 'q'
  28. 線上說明文件 man page 常夾雜許多控制符號,如何將 man ls 轉存為一般不含椌制符號的文字檔 ls.txt?
    Sol. man ls | col -b > ls.txt
  29. 如何將設定檔 /etc/man.config 中的 [tab] 改成空白,且轉存文字檔 man.txt?
    Sol. cat /etc/man.config | col -x > man.txt
  30. 如何用 root 的身份,將 /etc/group 與 /etc/gshadow 相關資料整合成一欄?
    Sol. join -t ':' /etc/group /etc/gshadow
  31. 如何用 root 的身份,將 /etc/passwd 與 /etc/shadow 相關資料整合成一欄?
    Sol. join -t ':' /etc/passwd /etc/shadow
  32. /etc/passwd 第四個欄位是 GID,其記錄在 /etc/group 中的第三個欄位,如何用 root 的身份,將兩個檔案整合?
    Sol. join -t ':' -1 4 /etc/passwd -2 3 /etc/group
  33. 如何用 root 的身份,將 /etc/fstab 與 /etc/mtab 相關資料整合成一欄?
    Sol. join /etc/fstab /etc/mtab
  34. 如何用 root 的身份,將 /etc/passwd 與 /etc/shadow 同一行貼在一起,且中間是以 [tab] 按鍵隔開?
    Sol. paste /etc/passwd /etc/shadow
  35. 如何用 root 的身份,將 /etc/passwd 與 /etc/shadow 同一行貼在一起,且中間是以冒號 : 隔開?
    Sol. paste -d ":" /etc/passwd /etc/shadow
  36. 如何將 /etc/man.config 內行首為 MANPATH 的字樣取出,且僅取前三行?
    Sol. grep '^MANPATH' /etc/man.config | head -n 3
  37. 如何將 /etc/man.config 內行首為 MANPATH 的字樣取出,且僅取前三行並用 cat 將所有的符號都列出來?
    Sol. grep '^MANPATH' /etc/man.config | head -n 3 | cat -A
  38. 如何將 /etc/man.config 內行首為 MANPATH 的字樣取出,且僅取前三行,並將 [tab] 按鍵設定成 9 個字元,最後用 cat 將所有的符號都列出來?
    Sol. grep '^MANPATH' /etc/man.config | head -n 3 | expand -t 9 - | cat -A
  39. /etc/termcap 有七百多 Mbytes,如何分成 300M 一個檔案?
    Sol. split -b 300m /etc/termcap termcap
  40. /etc/termcap 有七百多 Kbytes,如何分成 300K 一個檔案?
    Sol. split -b 300k /etc/termcap termcap
  41. /etc/termcap 有七百多 Kbytes,如何分成 300K 一個檔案,會產生那幾個檔案?
    Sol. termcapaa, termcapab 及 termcapac
  42. 有一檔案以 split 分成多個小檔案 termcap??,如何將其合成一個檔案名為 termcap?
    Sol. cat termcap?? » termcap
  43. 如何將 ls -al / 輸出的資訊,每十行記錄成一個檔案 lsroot?
    Sol. ls -al / | split -l 10 - lsroot
  44. 如何將 /etc/passwd 內的第一欄取出,僅取三行,使用指令 finger 將每個帳號內容秀出來?
    Sol. cut -d ':' -f1 < /etc/passwd | head -n 3 | xargs finger
  45. 如何將 /etc/passwd 內的第一欄取出,僅取三行,使用指令 finger 將每個帳號內容秀出來,且每次執行 finger 時,都要詢問使用者是否動作?
    Sol. cut -d ':' -f1 < /etc/passwd | head -n 3 | xargs -p finger
  46. 如何將所有的 /etc/passwd 內的第一欄取出,使用指令 finger 查閱帳號內容,但一次僅查閱五個帳號,且每次執行 finger 時,都要詢問使用者是否動作?
    Sol. cut -d ':' -f1 < /etc/passwd | xargs -p -n 5 finger
  47. 如何將所有的 /etc/passwd 內的第一欄取出,使用指令 finger 查閱帳號內容,但當分析到 lp 就結束這串指令?
    Sol. cut -d ':' -f1 < /etc/passwd | xargs -p -e'lp' finger
  48. 如何將 /home 裡面的檔案打包,打包的資料傳送到 stdout,將 /home 裡面的檔案打包,打包的資料傳送到 stdout;再利用管線處理,將 stdout 做為後續 tar -xvf 的 stdin 解壓縮?
    Sol. tar -cvf - /home | tar -xvf -

next up previous
Next: 正規表示法 Up: 資料導向與管線處理 Previous: 資料流重導向
2012-10-11