
|  |  |  |  |  | 
| $ grep home /etc/passwd ←列出檔案〝etc/passwd〞中字串〝home〞的行來看目前已建立的帳號 aaa:x:500:500::/home/aaa:/bin/bash bbb:x:501:501::/home/bbb:/bin/bash frank:x:502:502:Frank Wang:/home/frank:/bin/bash phoebe:x:503:503::/home/phoebe:/bin/bash | 
| $ ls -F /etc | grep '/$' ←只列出〝/etc〞下的目錄但不包含檔案 a2ps/ acpi/ alsa/ alternatives/ audisp/ audit/ avahi/ blkid/ bluetooth/ 以下略 | 
| $ ls -d /etc/* | grep [[:digit:]] | grep [[:upper:]] ←列出〝/etc〞目錄下用數字的和大寫字母的檔案 /etc/X11 | 
| $ ls -d /etc/* | grep '[A-Z].*' ←列出〝/etc〞目錄下第一個字元為大寫的檔案或目錄 /etc/ConsoleKit /etc/DIR_COLORS /etc/group.OLD /etc/Muttrc | 
| $  grep -r 'colou*r' /etc/gconf  ←找出 /etc/gconf 內(含子目錄),檔案內容有〝color〞或〝colour〞檔案 /etc/gconf/gconf.xml.defaults/%gconf-tree-or.xml: <entry name="color_shading_ty /etc/gconf/gconf.xml.defaults/%gconf-tree-or.xml: <entry name="secondary_color"> /etc/gconf/gconf.xml.defaults/%gconf-tree-or.xml: <entry name="primary_color"> | 
| 語法:[STDIN] grep [-otpiton][--option] [FILE] or [STDOUT] | 註 | ||
| 指令名稱/功能/命令使用者 | 選項 | 功能 | |
| grep/ 檔案中尋找字串/ Any | -a | 搜尋二進制(binary)檔 | |
| -A# | 列出搜尋到的字串那行的內容和後 # 行內容(〝#〞為數字) | ||
| -B# | 列出搜尋到的字串那行的內容和前 # 行內容(〝#〞為數字) | ||
| -C# | 列出搜尋到的字串那行的內容和前後 # 行內容(〝#〞為數字) | ||
| -c | 顯示符合搜尋結果的列數 | ||
| -D[read][skip] | 搜尋裝置檔或 Name Pipe 或 Socket 檔 | 可接的項目有 〝read〞:把裝置檔當一般檔案處理 〝skip〞:不處理裝置檔 | |
| -d[read][skip][recurse] | 搜尋目錄 | 此選項部分版本的 OS 或檔案系統可能不完整的支援或可能產生錯誤。 可接的項目有 〝read〞:把目錄當一般檔案處理 〝skip〞:不處理目錄 〝recurse〞:處理目錄和子目錄,同等選項〝-r〞 | |
| -e | 指定樣板 | 主要用於處理以〝-〞開頭的檔案 (因以〝-〞開頭檔案和選項符號〝-〞相同沒用此選項會被誤判) | |
| -E | 強制用延伸正規表示法解讀搜尋的語法 | ||
| -f | 指定樣板檔 | ||
| -F | 用固定字串(即不用正規表示法解讀)搜尋 | ||
| -G | 將指定樣板檔以基礎正規表示法解讀 | ||
| -h | 搜尋多檔案時不列出檔案名稱 | 多檔案搜尋時才有區別 | |
| -H | 列出符合字串的那一行的內容和檔案名稱(此為預設值) | ||
| -i | 忽略大小寫之差別 | ||
| -I | 搜尋二進制檔如符合,不輸出〝Binary file XXX matches〞 | 此選項找二進檔檔時不顯示〝Binary file XXX〞以免干擾輸出畫面。 | |
| -l | 只列出符合的檔案名稱 | 主要用於多檔案搜尋 | |
| -L | 列出不符合的檔案名稱 | 主要用於多檔案搜尋 | |
| -n | 列出符合字串的行號 | ||
| -q | 不顯示輸出 | 主要用於 bash 檔當判斷時用 | |
| -r | 連同子目錄一起搜尋 | ||
| -v | 反相搜尋,即符合字串那一列反而不輸出 | ||
| -w | 只匹配〝完整字〞(whole words)的字串 | 如完整字匹配〝apple〞而字串如為〝apples〞或〝applets〞等都不符合 | |
| -x | 只匹配全列都符合的那一列 | ||
| --help | 指令自帶說明 | ||
| $ grep -n 'google' re.txt ←列出字串所在的行數 | 
| $ cat MY_PATTERN ←例如有樣板檔〝MY_PATTERN〞內容如下: TAIWAN [Tt]aiwan $ grep -f MY_PATTERN *.txt ←用樣板檔〝MY_PATTERN〞內的樣板搜尋所有副檔名為〝txt〞的檔案 | 
| $ cat my_file ←例如有檔案〝my_file〞內容如下: Introduction to Linux Linux is a muti-user & muti-task OS $ grep -e '-user' my_file ←搜尋檔案〝my_file〞中的字串'-user' Linux is a muti-user & muti-task OS | 
| $ grep -ne 'mail' -ne 'news' /etc/passwd ←搜尋字串〝mail〞&〝news〞並列出行號 9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10:news:x:9:13:news:/etc/news: 27:mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin | 
| $ grep -q 'google' re.txt && cp re.txt re.txt~ ←如果檔案〝reg.txt〞有字串〝google〞,就備份此檔 | 
| $ egrep 'goo?' re.txt ←搜尋字串〝go〞或〝goo〞...〝gooooooooooo〞 | 
| $ ls /etc/ | egrep 'pr(o|e)' ←搜尋有〝pre〞或〝pro〞的字串 iproute2 modprobe.conf modprobe.conf~ modprobe.d prelink.cache 以下略 | 
| $ fgrep 's.' re.txt ←不用正規表示法解讀,單純只是要搜尋字串〝s.〞 google Goggles Solves SUDOKU Puzzles. $ fgrep '.*' /etc/*.conf ←搜尋字串〝.*〞但非正規表示法意義上的〝無到任何字元〞 | 
| $ echo  -e '12\t3\t456\t789' 12 3 456 789 | 
| $ echo  -e '12\t3\t456\t789' | cut -f 2,4 3 789 | 
| -f n | 擷取欄位 n | 
| -f n,m,o,p | 擷取欄位 n,m,o 和 p | 
| -f n-m | 擷取欄位從 n 到 m | 
| -f n- | 擷取欄位從 n 到最後 | 
| -f -n | 擷取欄位從第一個 到第 n 個 | 
| -f n-m,o-p,q,r- | 擷取欄位從 n 到 m, o 到 p,q 和 r 到最後 | 
| $ cat /etc/passwd | grep '/home' | cut -d":" -f1 aaa bbb patrick cindy danny | 
| $ echo  '123456789' | cut  -c 5- ←擷取字元從 5 到最後一個字元 56789 | 
| 語法:[STDIN] cut [-otpiton][--option][CHAR][FILE] | 註 | ||
| 指令名稱/功能/命令使用者 | 選項 | 功能 | |
| cut/ 擷取欄位/ Any | -b | 擷取單位為 byte | 如用於英文語系,效果同選項〝-c〞 | 
| -c | 擷取單位為字元 | ||
| -d "CHAR" | 設定自定的欄位間隔 | ||
| -f FIELD[,FILED] | 設定輸出的欄位 | 配合選項〝 -d〞或預設的 tab 欄位間隔使用 | |
| -s | 如某行沒有符合的欄位間隔不輸出 | ||
| -n | 不分割 mutibyte 字元 | 用於非英文語系的 mutibyte字元 | |
| --output-delimiter | 自定輸出的間隔字串 | ||
| --help | 指令自帶說明 | ||
| $ echo -e '12\t3\t456\t789' | cut  --output-delimiter="---" -f 1- ←自定輸出的間隔字串〝---〞 12--3---456---789 | 
| $ export TIME_STYLE=long-iso ←設日期/時間格式(不同環境設定會影響〝ls -l〞的輸出格式) | |||||||
| $ ls -l --time-style=long-iso | |||||||
| drwxr-xy-x | 2 | aaa | aaa | 4096 | 2011-09-07 | 11:44 | Desktop | 
| drwxr-xy-x | 2 | aaa | aaa | 4096 | 2011-09-07 | 11:44 | Documents | 
| -rw-rw-r-- | 2 | aaa | aaa | 8 | 2011-08-08 | 12:42 | fileA | 
| -rw-rw-r-- | 2 | aaa | aaa | 12 | 2011-08-07 | 12:34 | fileB | 
| -rw-rw-r-- | 2 | aaa | aaa | 112 | 2011-03-08 | 10:12 | MypProject | 
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 ←欄位數 | 
| $ man regex REGEX(3) Linux Programmer’s Manual REGEX(3) NAME regcomp, regexec, regerror, regfree - POSIX regex functions SYNOPSIS #include <sys/types.h> #include <regex.h> int regcomp(regex_t *preg, const char *regex, int cflags); int regexec(const regex_t *preg, const char *string, size_t nmatch, 以下略 | 
| REGEX(3)                   Linux Programmer’s Manual                  REGEX(3) N^HNA^HAM^HME^HE regcomp, regexec, regerror, regfree - POSIX regex functions S^HSY^HYN^HNO^HOP^HPS^HSI^HIS^HS #^H#i^Hin^Hnc^Hcl^Hlu^Hud^Hde^He <^H<s^Hsy^Hys^Hs/^H/t^Hty^Hyp^Hpe^Hes^Hs 以下略 | 
| $ echo -e '12\t\t3\t456\t789'  | sed -n 'l' ←用指令〝sed〞讓 tab 現形(顯示 \t) 12\t\t3\t456\t789$ $ echo -e '12\t3\t456\t789' | col -x | sed -n 'l' ←用〝col -x〞把tab 轉為空格 12 3 456 789$ | 
| $ echo '012345' | tr 1 A ←將字元〝1〞轉換為〝A〞 0A2345 | 
| $ echo 'abcdef 123 XYZ' | tr 'a-z' 'A-Z' ←將小寫字元轉大寫 ABCDEF 123 XYZ $ echo 'abcdef 123 XYZ' | tr '[:digit:]' 'i-z' ←將數字轉小寫英文且從 i 開始 abcdef jkl XYZ | 
| $ echo 'this is a starfruit' | tr 'is' '56' th56 56 a 6tarfru5t | 
| ASCII 控制碼表示法 | Dec | Hex | ASCII 縮寫 | 名稱/意義 | 
| \a | 7 | 7 | BEL | 響鈴 (bell) | 
| \b | 8 | 8 | BS | 退格 (backspace) | 
| \t | 9 | 9 | TAB | 水平定位 (horizontal tab) | 
| \n | 10 | 0A | LF | 換行 (line feed,new line) | 
| \v | 11 | 0B | VT | 垂直定位 (vertical tab) | 
| \f | 12 | 0C | FF | 換頁 (NP form feed, new page) | 
| \r | 13 | 0D | CR | 回車 (carriage return) | 
| \\ | 92 | 5c | 字元〝\〞 | 
| 語法:[STDIN] tr [-otpiton][--option] CHAR SET1 [CHAR SET2] | ||
| 指令名稱/功能/命令使用者 | 選項 | 功能 | 
| tr/ (translate character)字元轉換/ Any | -c | 反向選取 | 
| -d | 刪除字元 | |
| -s | 刪除連續重複字元 | |
| -t | 刪除來源字元多於目的字元的部份 | |
| $ echo "1               2          3   4" | tr -s " " ←刪除多餘的空白 1 2 3 4 $ echo -e "1\t\t\t2 3 4" | tr -s " \t" ←刪除多餘的空白和 tab 1 2 3 4 $ tr -s '\n' < fileA > fileB ←刪除〝fileA〞多餘的空行存成〝fileB〞 $ sed -n '5,20 p' fileA | tr -s "\n" ←刪除〝fileA〞5~20 行內多餘的空行 | 
| $ echo 'busy buzzing bumblebees buzzing busying' | tr -d 'busy' ←刪除字元〝b〞,〝u〞,〝s〞或〝y〞(不是刪除字串〝busy〞)。 zzing mleee zzing ing $ echo -e "1\t\t\t2 3 4" | tr -s " \t" | tr -d " \t" ←先刪除重複的空白和tab 再把空白和 tab 刪除 1234 $ echo 'abcdef 123 XYZ' | tr -d '[:digit:]' ←刪除所有數字 abcdef XYZ $ tr -d '\r' < DOS_FILE > UNIX_FILE ←刪除 windows/DOS 檔的字元'\r' | 
| $ echo 'abcdef 123 XYZ' | tr -c '[:alpha:]' '-' ←把所有非字母的字元轉為字元〝-〞 abcdef-----XYZ- $ echo 'abcdef 123 XYZ' | tr -t 'abcde' 'AB' ←目的字元只有〝A〞和〝B〞少於來源〝a〞~〝e〞,故只轉換前二個字元 ABcdef 123 XYZ | 
| $ cat equip xerox apr 4 acer1 feb 1 XEROX-FUJI may 5 printer1 oct 6 acer2 oct 10 printer1 jul 3 ASUS1 sep 4 Apple jun 5 IBM2 dec 7 acer2 oct 10 ASUS2 nov 20 IBM1 mar 1 | 
| $ LANG=C ←設定語系為〝C〞(同等〝LANG=POSIX〞)此時排序是根據 ASCII table $ sort equip ASUS1 sep 4 ASUS2 nov 20 Apple jun 5 IBM1 mar 1 IBM2 dec 7 XEROX-FUJI may 5 acer1 feb 1 acer2 oct 10 acer2 oct 10 printer1 jul 3 printer1 oct 6 xerox apr 4 | 
| $ sort -f equip  ←選項〝-f〞為不管大小寫 acer1 feb 1 acer2 oct 10 acer2 oct 10 Apple jun 5 ASUS1 sep 4 ASUS2 nov 20 IBM1 mar 1 IBM2 dec 7 printer1 jul 3 printer1 oct 6 xerox apr 4 XEROX-FUJI may 5 | 
| $ sort -k 3 equip ←選項〝-k〞,根據指定的欄位來排序 IBM1 mar 1 acer1 feb 1 acer2 oct 10 acer2 oct 10 ASUS2 nov 20 printer1 jul 3 ASUS1 sep 4 以下略 | 
| $ sort -n -k 3 equip ←根據欄位 3 的數字大小排序 acer1 feb 1 IBM1 mar 1 printer11 jul 3 ASUS1 sep 4 xerox apr 4 Apple jun 5 XEROX-FUJI may 5 printer11 oct 6 IBM2 dec 7 acer2 oct 10 acer2 oct 10 ASUS2 nov 20 | 
| $ ls -l /etc | sort  -k2 -k5 ←欄位 2 相等時根據欄位 5 來排序 以上略 -rw-r--r-- 1 root root 77598 Nov 25 00:30 ld.so.cache -rw-r--r-- 1 root root 84649 Aug 23 2007 sensors.conf -rw-r--r-- 1 root root 117276 Sep 17 2007 Muttrc -rw-r--r-- 1 root root 362047 Apr 18 2007 services -rw-r--r-- 1 root root 412666 Jan 26 14:21 prelink.cache 以下略 | 
| $ sort -M -k 2 equip ←根據欄位 2 月份來排序 acer1 feb 1 IBM1 mar 1 printer11 jul 3 ASUS1 sep 4 以下略 | 
| $ cat  equip1 ←清單前被加了員工使用者的 id id03_xerox apr 4 id04_XEROX-FUJI may 5 id06_acer1 feb 1 id05_IBM1 mar 1 id09_IBM2 dec 7 id12_printer1 jul 3 $ sort -k1.6 equip1 ←指定欄位 1 的第 6 個字元開始排序 id06_acer1 feb 1 id05_IBM1 mar 1 id09_IBM2 dec 7 id12_printer1 jul 3 id03_xerox apr 4 id04_XEROX-FUJI may 5 | 
| 語法:[STDIN] sort [-otpiton] [FILES] | ||
| 指令名稱/功能/命令使用者 | 選項 | 功能 | 
| sort/ 排序/ Any | -b | 忽略每行前面的空白字元 | 
| -d | 只考慮空白,數字和字母 | |
| -f | 忽略大小寫 | |
| -g | 數字的大小排序,類似選項〝-n〞但可以是科學符號表示法如 〝1.23E10〞 | |
| -i | 忽略不可列印字元` | |
| -k field[.STAR CHAR] | 根據指定的欄位來排序 | |
| -M | 根據月份的英文〝JAN〞,〝FEB〞...〝DEC〞來排序 | |
| -n | 根據數字的大小排序 | |
| -o FILE | 將輸出寫入檔案而不是螢幕 | |
| -R | 亂數隨機排序 | |
| -r | 反向排序(由大到小) | |
| -t CHAR | 指定間隔字元 | |
| -u | 刪除排序完重複的行 | |
| $ sort equip | uniq > result ←sort 排序完經 uniq 來刪除相鄰重複的行(同等用〝sort -u〞) $ echo -e 'lineA\nlineA\nlineB' | uniq ←相鄰重複的行才會被刪除 lineA lineB $ echo -e 'lineA\nlineB\nlineA' | uniq ←如不相鄰雖有重複的行不會被刪除 lineA lineB lineA $ echo -e 'lineA\n\n\n\n\n\nlineB' | uniq ←刪除中間的空行 lineA LineB | 
| 語法:[STDIN] uniq [-otpiton] [FILES] | ||
| 指令名稱/功能/命令使用者 | 選項 | 功能 | 
| uniq/ 刪除相鄰重複的行/ Any | -c | 顯示重複出現的次數 | 
| -d | 僅顯示相鄰且重複的行 | |
| -f # | 略過比較的欄位(〝# 〞為欄位數) | |
| -s # | 忽略第幾 # 個字元 | |
| -u | 和〝-d 〞相反,列出只出現一次的行 | |
| -w # | 每行最多比較第 # 個字元 | |
| $ echo -e 'lineA\nLineB\nLineB\nLineC' | uniq -u ←列出只出現一次的行 lineA LineC # echo -e 'lineA\nLineB\nLineB\nLineC' | uniq -c ←顯示重複出現的次數 1 lineA 2 LineB 1 LineC $ uniq -s 9 fileA ←不比較每行的第 9 個字元 $ uniq -w 9 fileA ←只比較毎行前 9 個字元 |