![]() |
![]() |
![]() |
![]() |
![]() |
$ 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 個字元 |