11-6
檔案搜尋工具
內容:
檔案搜尋工具就是在檔案(或某一串列資料)內搜尋所要的文字(或字串),這些目標文字可以直接以純文字表示,也可以利用正規式表示。基本上,搜尋工具在一般文書處理器裡常見到,譬如,vi、word、記事本等等。但
Shell
與文書處理兩者的搜尋工具有很大的不同,文書處理大多是將游標放置到目標字串的位置,而
Shell
是處理一連串進來的文字(無論串列資料或檔案皆是如此),找出目標字串,其中並沒有游標工具。一般找到目標字串後,通常會將該行內容顯示於終端機上,或許還會有其他的處理,但這還需要再配合其他過濾器工具。Unix/Linux
系統上常用的搜尋工具有 grep、egrep
與
fgrep,以下分別介紹之。
11-6-1 grep
搜尋工具
grep(Global
Regular Expression Print)的命令格式為:
$ grep [options] PATTERN
[FILE...]
$ grep [options] [-e
PATTERN | -f FILE] [FILE...] |
其中常用選項(options)有:
²
- c
:計算出行數。
²
-l
:顯示出相符的檔名。
²
-n
:顯示出相符的行號。
²
-i
:忽略大小寫。
(A)
【純文字搜尋】
在檔案中尋找某一純文字字串,搜尋成功再印出該行,操作範例如下:
$ cat
file_2
【觀察
file_2
內容】
This is my question.
Is this a dog or cat?
$
grep my file_2
【在
file_2
內搜尋
my
字串】
This is my
question.
【找到則印出該行內容】
$
grep 'dog or cat' file_2
【在
file_2
中搜尋
‘dog or cat’
字串】
Is this a dog or cat? |
(B)
【純文字附選項搜尋】
為了增加搜尋效益,可選擇附加某些選項,操作範例如下:
$ cat
file1
【觀察
file1
內容】
Is this a book?
Yes, this is a book
$ cat
file2
【觀察
file2
內容】
Where is my book?
$
grep -i T file1 【由
file1
中找出有
T
的字樣,而不論其大小寫】
Is this a book?
Yes, this is a book
$
grep -l 'Where' file1 file2
【找出
Where
字串是否在
file2
與
file2】
file2
$
grep -li where file1 file2
【同上,但不理會大小寫】
file2
$
grep -n 'I' file1
【在
file1
中找出有
I
字串的行號】
1:Is this a book? |
(C)【正規表示式搜尋】
利用正規表示式搜尋,可以找出變化性較高的字串,以下介紹幾個範例:
Ø
『.』表示式:符合任何單一字元,操作範例如下:
$ cat
file1
Is this a book?
Yes, this is a book
$
grep 'I.' file1
【找出
I
後面緊接著一個單一字元的字串】
Is this a book? |
Ø
『*』表示式:符合空白或任何長度的字元,操作範例如下:
$
grep 'Ye*' file1
【找出前面是
Ye
的任何字串或字串】
Yes, this is a book |
Ø
『[]』表示式:符合任何中括號內的字元,操作範例如下:
$ cat
file_2
This is my question.
Is this a dog or cat?
$
grep [Mm] file_2
【找出有包含有
M
或
m
字串】
This is my question. |
Ø
『^』表示式:一行的開始符合某一字串,操作範例如下:
$
grep ^This file_2
【找出行的開頭是
This
的字串】
This is my question. |
Ø
『$』表示式:一行的結尾符合某一字串,操作範例如下:
$
grep ?$ file_2
【找出行的結尾是
?
的字串】
Is this a dog or cat? |
|