1、findphp
find命令用來在指定目錄下查找文件。若是使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄與文件。而且將查找到的子目錄和文件所有進行顯示。html
語法mysql
find path -option [ -print ] [ -exec -ok command ] {} \;
經常使用選項:git
-name 查找根目錄及其子目錄下全部以 log 結尾的文件,文件名區分大小寫,例如:find / -name '*logf'正則表達式
-iname 查找當前目錄及其子目錄下全部文件名爲 test 的文件,文件名不區分大小寫,例如:find . -name testsql
-user 查找文件所屬用戶爲 mysql 的全部文件,例如:find . -user mysqlexpress
-group 查找文件所屬組爲 git 的全部文件,例如:find . -group gitide
-type 根據類型查找:以下工具
-size 根據文件大小查詢測試
-mtime 根據文件更改時間查找
-mmin
-mindepth n 從第 n 級目錄開始搜索
-maxdepth n 表示至多搜索到第 n-1 級子目錄。
操做查找到的文件:
-print 打印輸出。 默認的選項,即打印出找到的結果。
-exec 對搜索到的文件執行特定的操做,固定的格式爲:-exec 'commond' {} \; 注意:{} 表示查詢的結果。
-ok 和 -exec 的功能同樣,只是每次操做都會給用戶提示。
邏輯運算符:
-a 與 (默認狀況查詢條件之間都是 與 的關係)
-o 或
-not | ! 非
2、grep
grep(global search regular expression(RE) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。
語法:
grep [-abcEFGhHilLnqrsvVwxy][-A<顯示列數>][-B<顯示列數>][-C<顯示列數>][-d<進行動做>][-e<範本樣式>][-f<範本文件>][--help][範本樣式][文件或目錄...]
選項:
選項 | 描述 |
-a | 不要忽略二進制數據 |
-A<顯示列數> | 除了顯示符合範本樣式的那一行以外,並顯示該行以後的內容 |
-b | 在顯示符合範本樣式的那一行以外,並顯示該行以前的內容 |
-c | 計算符合範本樣式的列數 |
-C<顯示列數>或-<顯示列數> | 除了顯示符合範本樣式的那一列以外,並顯示該列以前後的內容 |
-d<進行動做> | 當指定要查找的是目錄而非文件時,必須使用這項參數,不然grep命令將回報信息並中止動做 |
-e<範本樣式> | 指定字符串做爲查找文件內容的範本樣式 |
-E | 將範本樣式爲延伸的普通表示法來使用,意味着使用能使用擴展正則表達式 |
-f<範本文件> | 指定範本文件,其內容有一個或多個範本樣式,讓grep查找符合範本條件的文件內容,格式爲每一列的範本樣式 |
-F | 將範本樣式視爲固定字符串的列表 |
-G | 將範本樣式視爲普通的表示法來使用 |
-h | 在顯示符合範本樣式的那一列以前,不標示該列所屬的文件名稱 |
-H | 在顯示符合範本樣式的那一列以前,標示該列的文件名稱 |
-i | 忽略字符大小寫的差異 |
-l | 列出文件內容符合指定的範本樣式的文件名稱 |
-L | 列出文件內容不符合指定的範本樣式的文件名稱 |
-n | 在顯示符合範本樣式的那一列以前,標示出該列的編號 |
-q | 不顯示任何信息 |
-R/-r | 此參數的效果和指定「-d recurse」參數相同 |
-s | 不顯示錯誤信息 |
-v | 反轉查找 |
-w | 只顯示全字符合的列 |
-x | 只顯示全列符合的列 |
-y | 此參數效果跟「-i」相同 |
-o | 只輸出文件中匹配到的部分 |
示例:
# 在文件中搜索一個單詞,命令會返回一個包含「match_pattern」的文本行: grep match_pattern file_name grep "match_pattern" file_name # 在多個文件中查找 grep "match_pattern" file_1 file_2 file_3 ... # 輸出除以外的全部行 -v 選項 grep -v "match_pattern" file_name # 使用正則表達式 -E 選項 grep -E "[1-9]+" egrep "[1-9]+" # 只輸出文件中匹配到的部分 -o 選項 grep -o "match_pattern" file_name # 統計文件或者文本中包含匹配字符串的行數 -c 選項 grep -c "text" file_name # 輸出包含匹配字符串的行數 -n 選項 grep "text" -n file_name cat file_name | grep "text" -n grep "text" -n file_1 file_2 # 打印樣式匹配所位於的字符或字節偏移 echo gun is not unix | grep -b -o "not" # 搜索多個文件並查找匹配文本在哪些文件中 grep -l "text" file1 file2 file3... # 在多級目錄中對文本進行遞歸搜索 grep "text" . -r -n # 忽略匹配樣式中的字符大小寫 echo "hello world" | grep -i "HELLO" # 選項 -e 制動多個匹配樣式 echo this is a text line | grep -e "is" -e "line" -o #只在目錄中全部的.php和.html文件中遞歸搜索字符"main()" grep "main()" . -r --include *.{php,html} #在搜索結果中排除全部README文件 grep "main()" . -r --exclude "README" #在搜索結果中排除filelist文件列表裏的文件 grep "main()" . -r --exclude-from filelist #不會輸出任何信息,若是命令運行成功返回0,失敗則返回非0值。通常用於條件測試 grep -q "test" filename #顯示匹配某個結果以後的3行,使用 -A 選項: seq 10 | grep "5" -A 3 5 6 7 8 #顯示匹配某個結果以前的3行,使用 -B 選項: seq 10 | grep "5" -B 3 2 3 4 5 #顯示匹配某個結果的前三行和後三行,使用 -C 選項: seq 10 | grep "5" -C 3 2 3 4 5 6 7 8 #若是匹配結果有多個,會用「--」做爲各匹配結果之間的分隔符: echo -e "a\nb\nc\na\nb\nc" | grep a -A 1 a b -- a b
3、sed
sed 命令是利用腳原本處理文本文件。
sed 可依照腳本的指令來處理、編輯文本文件。
Sed 主要用來自動編輯一個或多個文件、簡化對文件的反覆操做、編寫轉換程序等。
語法:
sed [選項] [腳本命令] 文件名
選項與參數
動做:
通常動做的前面會有一個地址的限制,例如 [地址]動做,表示咱們的動做要操做的行。下面咱們經過具體的例子直觀的看看 sed 的使用方法。
刪除行
// example.txt 內容以下 11 aa 22 bb 33 cc 23 dd 55 2e sed '1,2d' example.txt 輸出: 33 cc 23 dd 55 2e
其中1,2d中的d表示刪除,而d前面的表示刪除的行的地址,而1,2表示一個地址範圍,也就是刪除第1行和第2行。地址範圍的表示通常是 m,n 表示對m和n行之間的全部行進行操做,也包含第m行和第n行。sed的地址尋址中可使用$表示最後一行,例如 m,$ 表示對m行以及其後面的全部行進行操做,包括最後同樣。m,$d就是刪除m行以及其後面的全部行內容。固然咱們還能夠對某一行進行操做,例如2d表示僅僅刪除第2行。除了使用數字範圍 m,n 表示多行區間,以及m表示單行之外,咱們還可使用正則表達式選出符合條件的行,並對這些行進行操做,一樣的是上面的文件:
sed '/2/d' example.txt 輸出: 11 aa 33 cc
上面的命令中 /2/ 是一個正則表達式,在sed中正則表達式是寫在 /.../ 兩個斜槓中間的,這個正則的意思是尋找全部包含2的行,執行相應的操做,也就是刪除全部包含2的行,若是咱們只想刪除以2開頭的行呢,只須要修改一下正則表達式就能夠了:
sed '/^2/d' example.txt 輸出: 11 aa 33 cc 55 2e
新增行
sed '1a hello world' example.txt 輸出: 11 aa hello world 22 bb 33 cc 23 dd 55 2e
其中a命令表示在指定行的後面附加一行,1a則是在第一行的後面添加一行,添加的內容就是a後面的內容,若是a的前面沒有地址限定則在全部行的後面都會添加指定的字符串
sed '1i hello world' example.txt 輸出: hello world 11 aa 22 bb 33 cc 23 dd 55 2e
命令i表示在指定的行的前面插入一行,插入的內容爲其後面的字符串
替換行
sed '1c hello world' example.txt 輸出: hello world 22 bb 33 cc 23 dd 55 2e
命令c會替換指定的行的全部內容,替換成其後面的字符串,全部的新增,刪除,替換行,這些命令前面的地址修飾均可以指定地址空間,也均可以使用正則表達式,命令會應用在選出的符合地址條件的全部行上面,例如:
sed '/^2/c hello world' example.txt 輸出: 11 aa hello world 33 cc hello world 55 2e
替換以2開頭的行,其內容是c命令後面的字符串
替換部分字符串而不是整行
sed中除了上面的命令是針對整行進行操做的以外,還提供一個替換命令,該命令對某一行中的部分字符串進行操做,下面舉一個簡單的例子,仍是一樣的文本內容,執行下面的命令:
sed 's/aa/AA/' example.txt 輸出: 11 AA 22 bb 33 cc 23 dd 55 2e
咱們這裏說的就是s命令,執行的結果是咱們文件中的 aa 被替換成 AA ,咱們看一下s命令後面接的是3個斜槓分隔的兩串字符串,其含義是 s/待替換的字符串/新字符串/ 也就是說使用後面的 AA 替換文件中出現的前面的 aa 。實際上這裏的替換僅僅替換每一行遇到的第一個aa,咱們修改一下文件的內容:
// example.txt 11 aa 22 bb 33 cc 23 dd 55 2e 66 aaff ccaa zz ggaa sed 's/aa/AA/' example.txt 輸出: 11 AA 22 bb 33 cc 23 dd 55 2e 66 AAff ccaa zz ggAA
能夠看到第6行的ccaa中的aa是沒有被替換的,也就是說此時僅僅替換了每一行搜索到的第一個aa字符串進行操做,那麼若是要對一行裏面的全部的符合條件的字符串都作替換操做呢,咱們可使用參數g,例如修改命令以下:
sed 's/aa/AA/g' example.txt 輸出: 11 AA 22 bb 33 cc 23 dd 55 2e 66 AAff ccAA zz ggAA
在最後一個斜槓後面加上g選項以後,表示進行全局替換,也就是說一行中全部符合條件的舊字符串都會被替換成新字符串,而不只僅是第一個。與其餘針對行的操做同樣,s命令也能夠進行地址選擇,其地址使用方法與咱們以前的同樣,也就是在s的前面加上地址空間限定,例如:
sed '1s/aa/AA/g' example.txt 輸出: 11 AA 22 bb 33 cc 23 dd 55 2e 66 aaff ccaa zz ggaa
能夠看到僅僅對第一行進行了替換操做,其餘的地址限定方法一樣也是可使用的,咱們可使用m,n的限定,例如:
sed '5,$s/aa/AA/g' example.txt 輸出: 11 aa 22 bb 33 cc 23 dd 55 2e 66 AAff ccAA zz ggAA
表示對第5行直到文件末尾的全部行進行搜索替換操做,一樣s命令的地址限定也支持使用正則表達式限定符合條件的行,而後在這些行中進行字符串的搜索替換操做,例如:
sed '/^[0-9]/s/aa/AA/g' example.txt 輸出: 11 AA 22 bb 33 cc 23 dd 55 2e 66 AAff ccAA zz ggaa
咱們在s命令前面添加了 /^[0-9]/ 這個修飾,該正則表達式表示對全部以數字開頭的行,執行s操做
另一個要說明的是 s/待替換的字符串/新字符串/ 這種格式中 / 做爲分隔符並非必定的,當使用s命令時候,咱們可使用別的分隔符,實際上s後面緊接着的字符就是分隔符,因此不必定是 / 符號。例如:
echo 'aabbccaadd' | sed s#aa#AA#g 輸出: AAbbccAAdd
這裏s命令後面跟着的#符號被看成分隔符了
搜索並輸出行內容
sed還提供一個p命令用於搜索符合條件的行,並輸出該行的內容,而不作其餘的任何修改,例如:
// example.txt 11 aa 22 bb 33 cc 23 dd sed '2p' example.txt 輸出: 11 aa 22 bb 22 bb 33 cc 23 dd
能夠看到第二行被輸出來了,可是sed好像將文件的全部內容輸出了一遍,而第2行則多輸出了一次,實際上sed默認狀況下是會將全部標準輸入的數據又從新輸出到標準輸出的,咱們能夠加上 -n 選項讓sed僅僅是輸出通過處理以後的那些行,而不是輸出以前從標準輸入中獲取到的全部行內容,例如:
sed -n '2p' example.txt 輸出: 22 bb
這樣僅僅會輸出p命令的處理結果了,-n 選項通常是與p命令聯合使用的,其餘的增長,刪除,替換行的命令是不須要 -n 選項的
將修改應用到文件當中
咱們以前作的全部實驗,實際上都沒有修改test.txt文件的內容,也就是說咱們看到的修改結果僅僅輸出到控制檯上,而文件test.txt的內容是沒有修改的,咱們可使用 -i 選項告訴sed直接修改文件的內容,而不是將修改結果輸出到終端上,例如:
sed -i '2d' example.txt
命令運行以後,咱們發現example.txt的第2行沒有了
sed正則中的元字符
咱們知道sed中的命令前面可使用地址範圍進行限制,表示對文件的某些符合條件的行執行相應的操做,其中咱們可使用正則表達式選出要操做的行,而sed中正則的語法可能與咱們其餘命令的正則語法有一些不一樣,這裏咱們有必要列出sed中經常使用的正則元字符:
$ 表示行尾 ^ 表示行首 [a-z0-9]表示字符範圍 [^]表示除了字符集中的字符之外的字符 sed的正則中 \(\) 和 \{m,n\} 須要轉義 . 表示任意字符 * 表示零個或者多個 \+ 一次或屢次 \? 零次或一次 \| 表示或語法
4、awk
http://www.javashuo.com/article/p-rabsooij-eq.html (轉)
5、grep、sed、awk總結