Linux查找和篩選工具

本文為原創(chuàng)文章,轉(zhuǎn)載請標明出處

目錄

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

1. 文件名通配符

單字符匹配元字符 ?

匹配任意一個字符

多字符匹配元字符 *

匹配0或1或多個字符

字符范圍匹配符 []

匹配一個字符范圍,其表現(xiàn)形式可以是“-”表示的字母和數(shù)字的范圍,也可以是幾個字符的組合

排除范圍匹配符 [!]

不匹配符號內(nèi)出現(xiàn)的字符組合或字符數(shù)字范圍

2. 命令中的正則表達式

單字符匹配符 .

匹配任意一個字符

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

匹配單個字符或一個字符串序列的一次或多次重復出現(xiàn)

行首匹配符 ^

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

行尾匹配符 $

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

反斜杠屏蔽符 \

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

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

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

詞首詞尾匹配符 \< \>

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

重復次數(shù)匹配符 x\{\}

可以精確匹配字符或字符串連續(xù)出現(xiàn)的次數(shù)或次數(shù)范圍

3. 查找文件工具 find

基本格式

# find [path] [expression]

參數(shù):

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

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

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

按文件名查找

如:

# find /etc -name "*.conf"

按文件權限查找

如:

# find /etc -perm 664

按文件類型查找

如:

# find /dev -type b

按文件時間戳記查找

如:

# find /var/log -mtime -1

按文件大小查找

如:

# find /var/log -size +1M

按文件屬主或?qū)俳M查找

如:

# 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]

參數(shù)

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

例如:

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

5. 轉(zhuǎn)換和刪除重復命令 tr

# tr [option] [string1] [string2]

參數(shù)

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

例如:

小寫轉(zhuǎn)大寫
# tr -s "a-z" "A-Z" <test
刪除所有重復字母
# tr -s "[a-z][A-Z]"

6. 合并和分割工具

排序 sort

# sort [option] [file]

參數(shù)

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

例如:

對students文件第5個字段第8個字符按數(shù)字從大到小排序
# 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

數(shù)據(jù)剪切 cut

cut [option] [file]

參數(shù)

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

N:表示第N個字節(jié)
N-:表示從N到一行結束的內(nèi)的所有文本
N-M:表示從N到M之間的所有文本
-M:表示從開始到M之間的所有文本
-:從開始到結束的所有文本

例如:

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

數(shù)據(jù)粘貼 paste

paste [option] [file...]

參數(shù)

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

例如:

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

數(shù)據(jù)連接 join

# join [option] file1 file2

參數(shù)

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

例如:

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

去除重復 uniq

#uniq [option] [input[option]]

參數(shù)

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

sort -uuniq 區(qū)別
sort -u 將整個文本重復行刪除只保留一行
uniq 刪除連續(xù)重復行只保留一行
例如:

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

分割文件 split

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

參數(shù)

l:按行對文件進行分割
b:按字節(jié)對文件進行分割
C:按字符對文件進行分割
d:使用數(shù)字作為輸出文件的后綴

例如:

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

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

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,228評論 2 33
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,948評論 18 139
  • 基礎命令 主要的命令和快捷鍵 Linux系統(tǒng)命令由三部分組成:cmd + [options]+[operation...
    485b1aca799e閱讀 1,124評論 0 0
  • 本文筆記源自這里——[實驗樓]歡迎大家在下面交流其中有問題的地方喜歡請點收藏,每日更新(全部已親自實踐). 一. ...
    東皇Amrzs閱讀 4,043評論 7 54
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,571評論 9 467