Linux 下使用 Shell 處理文本時最常用的工具有: find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk。 ...
概述
Linux
下使用 Shell 處理文本時最常用的工具有: find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk
。
find 文件查找
man
文檔給出的 find
命令的一般形式為:
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]
這對於大部分人來說都太複雜了,[-H] [-L] [-P] [-D debugopts] [-Olevel] 這幾個選項並不常用,find
命令的常用形式可以簡化為:
$ find [PATH] [option] [action]
1,根據文件或者正則表達式進行匹配
$ find . # 查找當前目錄及子目錄下所有文件及文件夾
$ find /data -name "*.txt" # 在 /data 目錄及子目錄下查找以 .txt 結尾的文件名
$ find . \( -name "*.txt" -o -name "*.pdf" \) # 當前目錄及子目錄下查找所有以 .txt 和 .pdf 結尾的文件
$ find . -maxdepth 1 -type d # 查找當前目錄下所有的子目錄
$ find . -maxdepth 1 -regex ".*\.txt$" # 基於正則表達式匹配當前目錄下的所有以 .txt 結尾的文件
./multi_classifynet_infer_ret.txt
./cali_left_img.txt
... 省略
2,根據文件類型進行搜索
find . -type 類型參數,f 普通文件,l 符號連接,d 目錄,c 字元設備,b 塊設備,s 套接字,p Fifo
$ find . -maxdepth 1 -type d # 查找當前目錄下的所有子目錄
3,基於目錄深度搜索
$ find . maxdepth 3 -type f # 目錄向下最大深度限制 3
4,根據文件時間戳進行搜索
find . -type -f 時間戳參數
。與時間有關的選項:共有 -atime
, -ctime
與 -mtime
,以 -mtime
說明
- -mtime n : n 為數字,意義為在 n 天之前的『一天之內』被更改過內容的文件;
- -mtime +n :列出在 n 天之前(不含 n 天本身)被更改過內容的文件名;
- -mtime -n :列出在 n 天之內(含 n 天本身)被更改過內容的文件名。
- -newer file : file 為一個存在的文件,列出比 file 還要新的文件名
$ find /etc -newer /etc/passwd # 尋找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出
5,與文件許可權及名稱有關的參數:
-name filename
:搜尋文件名為filename
的文件。-size [+-]SIZE
:搜尋比 SIZE 還要大(+)或小(-)的文件。 這個 SIZE 的規格有:c
: 代表 byte,k
: 代表 1024 bytes。所以,要找比 50KB還要大的文件,就是-size +50k
。-type TYPE
:搜尋文件的類型為 TYPE 的, 類型主要有:一般正規文件 (f), 裝置文件 (b, c), 目錄 (d), 連結檔 (l), socket (s), 及 FIFO (p) 等屬性。-perm mode
:搜尋文件許可權『剛好等於』mode
的文件, 這個 mode 為類似 chmod 的屬性值, 舉例來說,-rwxr-xr-x
的屬性為755
。-perm -mode
:搜尋文件許可權『必須要全部囊括 mode 的許可權』的文件, 舉例來說,我們要搜尋-rwxr--r--
,亦即744
的文件,使用-perm -744
,但是當一個文件的許可權為-rwxr-xr-x
,亦即755
時,也會被列出來,因為-rwxr-xr-x
的屬性已經包括了-rwxr--r--
的屬性了。-perm /mode
:搜尋文件許可權『包含任一mode
的許可權』的文件, 舉例來說,我們搜尋 -rwxr-xr-x ,亦即 -perm /755 時,但一個文件屬性為 -rw-------也會被列出來,因為他有-rw....
的屬性存在。
範例:
```shell
root@17c30d837aba:/data# find . -maxdepth 1 -perm 777 # 查找當前目錄下文件許可權剛好等於777 的文件
.
./honggaozhang
./demo.sh
grep 文本搜索
grep
支持使用正則表達式搜索文本,並把匹配的行列印出來。grep
命令常見用法,在文件中搜索一個單詞,命令會返回一個包含 “match_pattern”
的文本行:
grep match_pattern file_name
grep "match_pattern" file_name
常用參數
-o
:只輸出匹配的文本行,-v
只輸出沒有匹配的文本行-c
:統計文件中包含文本的次數: `grep -c “text” filename-n
:列印匹配的行號-i
:搜索時忽略大小寫-l
:只列印文件名
$ grep "class" . -R -n # 在多級目錄中對文本遞歸搜索(程式員搜代碼的最愛)
$ grep -e "class" -e "vitural" file # 匹配多個模式
參考資料
- 【日常小記】linux中強大且常用命令:find、grep
- 鳥哥的Linux私房菜 基礎篇 第四版