Linux查找和篩選工具

本文爲原創文章,轉載請標明出處

目錄

  1. 文件名通配符
    • 單字符匹配元字符 ?
    • 多字符匹配元字符 *
    • 字符範圍匹配符 []
    • 排除範圍匹配符 [!]
  2. 命令中的正則表達式
    • 單字符匹配符 .
    • 單字符或字符串重複匹配符 *
    • 行首匹配符 ^
    • 行尾匹配符 $
    • 反斜槓屏蔽符 \
    • 範圍匹配符 [] 和排除範圍匹配符 [^]
    • 詞首詞尾匹配符 \< \>
    • 重複次數匹配符 x\{\}
  3. 查找文件工具 find
    • 按文件名查找
    • 按文件權限查找
    • 按文件類型查找
    • 按文件時間戳記查找
    • 按文件大小查找
    • 按文件屬主或屬組查找
    • 使用 execok 處理查找到的文件
    • 使用 xargs 處理查找到的文件
  4. 查找文本工具 grep
  5. 轉換和刪除重複命令 tr
  6. 合併和分割工具
    • 排序 sort
    • 數據剪切 cut
    • 數據粘貼 paste
    • 數據連接 join
    • 去除重複 uniq
    • 分割文件 split

1. 文件名通配符

單字符匹配元字符 ?

匹配任意一個字符

多字符匹配元字符 *

匹配0或1或多個字符

字符範圍匹配符 []

匹配一個字符範圍,其表現形式可以是“-”表示的字母和數字的範圍,也可以是幾個字符的組合

排除範圍匹配符 [!]

不匹配符號內出現的字符組合或字符數字範圍

2. 命令中的正則表達式

單字符匹配符 .

匹配任意一個字符

單字符或字符串重複匹配符 *

匹配單個字符或一個字符串序列的一次或多次重複出現

行首匹配符 ^

在匹配中指示行首位置字符串或模式

行尾匹配符 $

在匹配中指示行尾位置字符串或模式

反斜槓屏蔽符 \

屏蔽一些特殊字符的特殊含義

範圍匹配符 [] 和排除範圍匹配符 [^]

與文件名通配符中的範圍匹配符和排除範圍匹配符用法基本相同

詞首詞尾匹配符 \< \>

在文本開頭或文本結尾匹配與單詞開頭或單詞結尾相匹配的特定的字符串或模式

重複次數匹配符 x\{\}

可以精確匹配字符或字符串連續出現的次數或次數範圍

3. 查找文件工具 find

基本格式

# find [path] [expression]

參數:

depth:先從當前目錄查找,然後再從當前目錄的子目錄中查找
maxdepth LEVELS:向下搜索到第LEVELS層目錄,LEVELS爲0表示只在當前目錄查找
mindepth LEVELS:至少向下搜索LEVELS層目錄
mount:不搜索遠程文件系統
follow:搜索如果遇到鏈接文件就連同鏈接所指向的文件一併查找

name:按文件名查找
iname:按文件名查找,不區分大小寫
perm:按文件權限查找
tye:按文件類型查找
mtime +n[-n]:按文件內容改變的時間查找,+n表示修改時間距現在n天前,-n表示修改時間距現在n天以內
ctime +n[-n]:按文件屬性改變的時間查找
atime +n[-n]:按文件訪問的時間查找
size +n[-n]:按文件大小查找,+n表示文件大小大於n-n表示文件大小小於nn表示塊,1塊等於512字節
user:按文件所屬主查找
group:按文件所屬組查找
nouser:查找沒有有效屬主的文件
nogroup:查找沒有有效屬組的文件

prune:不再指定目錄中查找
print:將查找的文件輸出到標準輸出
exec:對查找到的文件執行shell命令
ok:對查找到的文件執行shell命令,在每次執行前提示用戶是否執行

按文件名查找

如:

# find /etc -name "*.conf"

按文件權限查找

如:

# find /etc -perm 664

按文件類型查找

如:

# find /dev -type b

按文件時間戳記查找

如:

# find /var/log -mtime -1

按文件大小查找

如:

# find /var/log -size +1M

按文件屬主或屬組查找

如:

# find / -user root

使用 execok 處理查找到的文件

如:

# find /var/log -size +1M -exec ls -l {} \;

使用 xargs 處理查找到的文件

如:

# find ~/ -name "test.txt" | xargs rm

4. 查找文本工具 grep

grep:global regular expression print 全局正則表達式打印

# grep [option] [pattern] [file]

參數

i:忽略大小寫
n:將結果輸出的同時,也輸出該行行號
s:在沒有查找到匹配的內容時,不顯示錯誤信息
l:從多個文件中查找時,只輸出找到匹配內容的文件名稱
h:從多個文件中查找時,只輸出匹配的內容,不顯示文件名稱
c:只輸出匹配內容的總行數
v:反轉查找,即輸出匹配內容以外的行

例如:

查詢來自雲南和河南的學生信息
# grep -E 'Yunnan|Henan' students

5. 轉換和刪除重複命令 tr

# tr [option] [string1] [string2]

參數

c:使用string1中字符的補集替換
d:刪除string1中包含的所有字符
s:刪除重複字符

例如:

小寫轉大寫
# tr -s "a-z" "A-Z" <test
刪除所有重複字母
# tr -s "[a-z][A-Z]"

6. 合併和分割工具

排序 sort

# sort [option] [file]

參數

b:按字段進行分類並忽略前面的空格或製表符
d:按字典的順序進行排序,將除空格和字母以外的字符排除
f:忽略大小寫
g:根據數值進行排序
i:只考慮可打印的字符
M:將字符按月份進行比較,例如JAN<...<DEC
n:按數值進行比較排序
r:返向排序
c;測試文件內容是否已經進行了排序,若無任何返回信息,則表示已經執行了排序操作
k:指定排序的關鍵字
m:合併已經排序的文件,不進行排序
o:將結果寫入文件,不再輸出到標準輸出上
s:通過屏蔽最後的分類比較穩定排序
t:使用指定的字符作爲字段分隔符
T:將臨時文件放入指定的目錄內
u:如果與參數c一起使用,則檢查是否在排序時已經去除重複的行,沒有參數c時,則在排序時去掉重複行
z:用一個0字節作爲結束,而不是一個換行符

例如:

對students文件第5個字段第8個字符按數字從大到小排序
# sort -k5.8nr students
先對students文件第5個字段排序,再按第10個字段排序
# sort -k 5,10n students
指定“#”作爲字段分隔符,並對students文件第三個字段進行排序
# sort -t# -k3 students
合併students1,students2到students_new
# sort -m students1 students2 >students_new

數據剪切 cut

cut [option] [file]

參數

b:表示要操作的對象是字節
c:表示要操作的對象是字符
f:表示要操作的對象是字段
d:指定字段分隔符,默認情況下是製表符tab
s:表示不包括沒有字段分隔符的行

N:表示第N個字節
N-:表示從N到一行結束的內的所有文本
N-M:表示從N到M之間的所有文本
-M:表示從開始到M之間的所有文本
-:從開始到結束的所有文本

例如:

剪切students文件所有行的前10個字符
# cut -b-10 students
以“#”爲分隔符,並對students文件第124個字段進行剪切
# cut -d# -f1-2,4 students

數據粘貼 paste

paste [option] [file...]

參數

d:對新生成的文本指定新的字段分隔符,默認情況下是製表符tab
s:橫向粘貼,默認縱向粘貼

例如:

縱向粘貼paste1,paste2文件
# paste paste1 paste2

數據連接 join

# join [option] file1 file2

參數

a:用於輸出2個文件中有關聯和沒關聯的行,將有關聯的行執行連接後輸出,沒關聯的行按預定的格式輸出
e:在文件1和文件2中查找關聯字段,如果沒有關聯字段,則將無關聯字段的行相應的字段用參數指定的字符串替代
i:在連接過程中忽略大小寫
j:使用指定的字段作爲關鍵字段連接
o:格式化輸出
t:設置字段間的分隔符,默認爲空格或製表符tab
v:與參數a的作用相同,但參數v只輸出無關聯的行

例如:

指定使用文件1的第2個字段和文件2的第2個字段作爲關鍵字,只顯示文件1的第126字段和文件2的第3字段
# join -j1 2 -j2 2 -o "1.1,1.2,1.6,2.3" students1 students2

去除重複 uniq

#uniq [option] [input[option]]

參數

c:輸出重複行的重複次數
d:僅輸出重複的行
f:忽略一些字段,只比較指定字段
s:忽略一些字符,只比較指定字段
i:忽略大小寫
u:輸出不重複的行
w;指定要比較的字符位置

sort -uuniq 區別
sort -u 將整個文本重複行刪除只保留一行
uniq 刪除連續重複行只保留一行
例如:

忽略第1個字段,從第2個字段第2個字符處開始比較
# uniq -f1 -s3 char

分割文件 split

# split [option] [input file] [output file]

參數

l:按行對文件進行分割
b:按字節對文件進行分割
C:按字符對文件進行分割
d:使用數字作爲輸出文件的後綴

例如:

指定每3行劃分爲一個文件
# split -l 3 students students

如有不當之處,請予指正,謝謝~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章