從這篇開始,是文本内容操作,差別于文本操作。
shell,perl,python,一直都是文本操作的專家語言,而我們今後學習的的将是shell的噱頭--文本操作。下面提到最常見的一個:
grep
這算是文本内容的一個重量級選手,能根據某些規格在上千行的文本檔案中查找所需要的資料。他能接受正規表達式和通配符。
基礎執行個體:
1. 指令翻譯包含給定match_pattern的文本行,如我在grep.txt中查找PATTERN
grep PATTERN grep.txt
or grep "PATTERN" grep.txt
2. 比對多個檔案
grep PATTERN grep.txt grep1.txt
3. 從stdin中讀取
echo –e "this is a word\nnext line" | grep word
列印:this is a word
4. grep 與 正規表達式
grep –E "[a-z]+"
或者
egrep "[a-z]+"
5. 隻輸出比對部分,而不是比對的目前行
echo this is line. | greip –o –E "[a-z]+\."
輸出:line
6. 列印除包含match_pattern的行之外的所有行,可使用
grep -v match_pattern file
7. 統計文本或者檔案中包含比對字元串的字數(這個面試經常會問到)
$grep -c "text" filename
但他給出的是比對行的次數,而不是比對的次數
統計比對數量的話,可以用到下面的技巧
$echo –e "1 2 3 4\nhello\n5 6"| egrep -o "[0-9]" | wc –l
列印1到6 | 從stdin中讀取數字,分行列印 | 統計行數
8. 列印行号
grep "text" -n filename
9. 搜2個檔案,以及他們的行号,輸出會列印檔案名
grep "text"–n s1.txt s2.txt
10.如果你隻想知道哪些檔案有 單詞PATTERN
grep –l PATTER s1.txt s2.txt
-L則傳回的不比對檔案清單
11.可以再整個目錄下查找 單詞PATTERN 在那些檔案裡
grep PATTERN . -R -n
12 同時多個比對查找
echo this is a line of text | grep -e "this" -e "line" -o
列印:
this
line
13 隻在某些合适的檔案中搜尋
grep "main()" .-r --include *.{c,cpp}
隻在.c 和.cpp結尾的檔案中搜尋 main()
14 進行搜尋排除某些檔案
grep "main()" . -r --exclude "README"
排除了所有檔案名為"README"的檔案
15 列印比對之前或之後的3行
seq 10 | grep 5 –A 3 之前
seq 10 | grep 6 –B 3 之後
16 列印比對前後3行,同時輸出
seq 10 | grep 5 –C 3
我們來看下--help
用法: grep [選項]... PATTERN [FILE]...
在每個 FILE 或是标準輸入中查找 PATTERN。
預設的 PATTERN 是一個基本正規表達式(縮寫為 BRE)。
例如: grep -i 'hello world' menu.h main.c
正規表達式選擇與解釋:
-E, --extended-regexp PATTERN 是一個可擴充的正規表達式(縮寫為 ERE)
-F, --fixed-strings PATTERN 是一組由斷行符分隔的定長字元串。
-G, --basic-regexp PATTERN 是一個基本正規表達式(縮寫為 BRE)
-P, --perl-regexp PATTERN 是一個 Perl 正規表達式
-e, --regexp=PATTERN 用 PATTERN 來進行比對操作
-f, --file=FILE 從 FILE 中取得 PATTERN
-i, --ignore-case 忽略大小寫
-w, --word-regexp 強制 PATTERN 僅完全比對字詞
-x, --line-regexp 強制 PATTERN 僅完全比對一行
-z, --null-data 一個 0 位元組的資料行,但不是空行
内容比較多,是以不全貼出來,全部内容在附件中。
大多數功能已經在執行個體中貼出,我的這個博文中,主要參考書籍《linux shell腳本攻略》
如果你覺得更是個學習時間比較充裕,不妨直接購買此書。
<a href="http://down.51cto.com/data/2361221" target="_blank">附件:http://down.51cto.com/data/2361221</a>
本文轉自 wws5201985 51CTO部落格,原文連結:http://blog.51cto.com/yjplxq/959483,如需轉載請自行聯系原作者