第四章 Linux查找和刪選工具

一,本章內容

1,查找工具find

2,查找文本工具grep

3sed流編輯器

4,轉換和刪除重複命令tr

5,合併和分割工具

備註:本Linux系統爲RHEL5.3

二,查找工具find

找出不知道在什麼地方的文件,或是找出某一特徵的文件,可以使用find

1find基本格式

find [path] [expression]

expression:用於定義find查找的表達式,表達式通常由選項,測試和動作3類參數組成。

選項用於指定find查找的目錄,幫助等信息,常用的選項如下:

help:獲得find幫助信息

depth:先從當前目錄查找,再從當前目錄的子目錄查找

maxdepth LEVELS:向下搜索到第層目錄,如果LEVELS=0時表示只在當前目錄查找

mindepth LEVELS:至少向下搜索LEVELS層目錄

mount:不搜索遠程文件系統

follow:搜索如果遇到鏈接文件就和鏈接文件所指向的文件一併檢查

測試參數:想搜索到一些具有某一特徵的文件,應該使用一些測試參數,測試參數是一些使得輸出更加詳細的參數。常用的測試參數如下:

name:按文件名查找

perm:按文件權限查找

type:查找某一類型的文件

mtime +n -n:按文件修改的時間查找,+n表示修改時間距現在n天以前,-n表示修改時間距現在n天以內

atime +n -n:按文件的訪問時間查找(使用方法與mtime相同)

size n [c]:搜索如果遇到鏈接文件就和鏈接文件所指向的文件一併檢查

atime +n -n:按文件的訪問時間查找(使用方法與mtime相同)

size n [c]:查找文件長度爲n塊的文件,c表示文件大小爲n字節的文件

User:按文件屬主查找

group:按文件屬組查找

nouser:查找沒有有效屬主的文件(文件屬主在/etc/passwd文件中不存在)

nogroup:查找沒有有效屬組的文件(文件屬組在/etc/group文件中不存在)

動作參數用於指定如何查找和處理查找到的文件,常用的動作有如下幾種:

prune:不在指定目錄中查找

print:將查找到的文件輸出到標準輸出

exec:對查找到的文件執行exec動作後附帶的Shell命令

ok:對查找到的文件執行ok動作後附帶的Shell命令,在每次執行前將提示用戶是否執行

2,按文件名稱查找

忘記一個文件存放在什麼位置時,可以使用name參數查找,也可使用文件名稱通配符配合使用。

 


3,按文件權限查找

使用perm參數按權限查找,需使用八進制表示權限(絕對模式),按權限進行查找,以便發現可能導致泄密,不安全的內容等

    

在當前目錄查找其他用戶可讀,寫,執行的文件(這種情況應引起重視),此時應在權限數值前加一個橫槓-”(“-”表示使用包含模式)

 

4,按文件的時間戳記查找

當需清理過期的日誌或文件時,可按照時間戳查找

查找7天以內修改的文件

 

查找1天前修改的文件

 

5,按文件的長度查找

  使用size按文件大小查找時,可像按時間戳記查找那樣使用+n表示文件長度大於n的文件,-n表示文件長度小於n的文件。默認情況文件大小的單位爲塊(一塊512字節),如果以字計算文件長度,應在數字後寫小寫字母w

 

6,按文件的屬主或屬組查找

當管理員件將一用戶或用戶組從系統中清除時,可能需要將該用戶或用戶組的文件收集起來保存一段時間。

 


7find工具其他參數

使用參數-o將兩個不同的參數連接起來

在除了/etc目錄的整個目錄中查找以”.conf”結尾的文件

 

在本地系統查找

 

8,使用execok處理查找到的文件

使用 exec, ok參數執行shell命令的格式如下:

-exec [Shell命令] { } \;

-ok [Shell命令] { } \;

 

9,使用xargs命令處理查找到的文件

使用execok處理查找到的文件時,存在一些缺陷:

[1] 系統對參數execok傳遞給shell命令的文件列表長度有一定限制,當find命令查找到用戶很多時,會出現參數列表溢出等錯誤

[2] 參數對find找到的每一個文件發起一個相應的處理進程,當find命令查找到用戶很多時,會影響系統性能。

Xargs構造一個參數列表交給命令執行,與exec,ok相比,xargs不一次獲取並處理find找到的所有文件,每次獲取一部分,處理完畢再獲取。整個過程xargs都只發起一個處理進程,對系統性能影響很小。

使用xargs時需要藉助管道。

 

10find工具應用實例

使用execok處理查找到的文件時,存在一些缺陷:

[1] 查找需要備份文件

 

[2] 列表過期文件

 

三,查找文本工具grep

從一大堆的命令輸出或是文本文件中找到一兩行的關鍵內容,可以使用grep工具進行篩選。

1grep基本格式

grep [option] pattern [file]

grep工具在文件file中找到與字符串pattern匹配的內容,如果找到,則將整行輸出到標準輸出。常用選項:

i:忽略大小寫

n:將結果輸出的同時,也輸出該行的行號

s:在沒有查到匹配的內容時,不顯示錯誤信息

l:從多個文件中查找時,只輸出找到匹配內容的文件名稱

h:從多個文件查找時,只輸出匹配的內容,不顯示文件名稱

c: 只輸出匹配內容的總行數

v:反轉查找,即輸出匹配內容以外的行

grep在工作時,總是以行爲單位,先將文本第一行讀入緩衝區進行查找,如找到匹配的字符串,就輸出整行,如沒有,就丟棄緩衝區內容並讀入下一行文本繼續查找,直至文本結束。

2grep命令使用

系統有一個學生登記表sudent

[1] 查找包含92的行

 

[2] 使用c選項統計查找到的總行數

[3] 反轉查找,查找不含有taixlixia的行

 

[4] 多文件查找

 

 

3,行首,行尾匹配查找

利用文件的行首或行尾進行查找。

 


4grep應用實例

[1] 精簡配置文件

除去配置文件中的註釋行,和默認配置語句。

 

四,sed 流編輯器

    sed通常用來對多個文件或命令輸出進行重複處理。

sed在工作時,總是以行爲單位,先將文本第一行讀入被稱爲模式空間的臨時緩衝區內。然後再讀取第一條編輯指令,使用指令中定義的模式和行號查找,編輯文本。完成編輯後,將結果輸出並讀取下一行,重複這個過程直到文本結束。除了模式空間以外,sed還使用一個稱爲保留空間的臨時緩衝區,保留空間通常用於暫存編輯內容。

1sed基本格式

 sed [option] command input-file

 sed [option] -f script-file input -file

常用的選項:

 n∶不輸出所有行,默認輸出所有行。
 e∶允許在該選項後面加一條新的編輯指令。當有多條編輯指令時 ,應該使用該選項逐一添加,如果編輯指令只有一條,可以不使用該選項
 f∶用於指定具有編輯指令的腳本文件
 h∶輸出sed的幫助信息

常用的定位方式:

n∶表示行號爲n的行

m,n∶表示一個行號的範圍,從m行到n

m,n!∶排除第m行到n

/pattern/∶輸出匹配pattern的所有行

/pattern1/patter2/∶表示匹配pattern1pattern2的所有行(需用選項e將兩個模式隔開)

/pattern/,~n∶從匹配pattern的行開始,向後的n行之間的所有行(即包括匹配行在內,一共n行)

/pattern/,+n∶從匹配pattern的行開始,向後的n行的所有行(即包括匹配行在內,一共n+1行)

n,/pattern/∶表示從第n行開始,到匹配pattern之內的所有行
常用命令:
 a\text∶在指定行後面加入新的文本信息text

 i\text∶在指定行前面加入新的文本信息text

 c\text∶使用新的文本信息text替換指定行

 p∶將指定行輸出到標準輸出

 P∶將模式空間中第一個換行符”\n”之前的文本輸出到標準輸出(選項大寫)

 =∶輸出匹配模式所在的行號

 d∶移除模式空間中的行並讀取下一行

 D∶刪除模式空間中最後一個換行符之前的文本。如果模式空間爲空,則將下一行文本讀取到模式空間中

 r file∶從文件file中讀取文本
 w file∶將結果寫入file文件中

 q∶退出指令,使用q制令可以讓sed立即退出,不再執行後面的操作
 !command∶對沒有被定位的行使用!之後的command編輯指令

 P∶將與模式patter1匹配的文本用pattern2替換。默認情況下,只替換第一次匹配到的內容。指令s後的分隔符可用任意字符代替。Flag選項通常指示如何替換或者替換成功後要進行的操作,g:將所有匹配到的內容全部替換,n:僅對行內第n次匹配到的內容進行替換,p:如果進行了替換,就將模式空間的文本輸出到標準輸出,w file:如果進行了替換,就將模式空間的文本寫入文件file中)

一個編輯指令只能對指定位置進行一次編輯操作,如要執行多次編輯操作,可使用{}將多條編輯指令放在其中。而對多個位置進行多次編輯可使用選項e添加多條編輯指令,也可使用管道並配合多個sed指令。

常用的分支語句

  :label∶標記點,標記一個位置以便跳轉語句跳轉到指定位置
   t lable∶測試指令,如果上一條替換指令成功執行,則轉移到標記點label處。如沒有label,則轉移到末尾

   b label∶無條件轉移到label處繼續執行。如沒有label,則轉移到末尾

   #:一般用於腳本的註釋,sed將忽略後面的內容。如出現在腳本的第一行,且後面是”n”(”#n”)sed將不禁止默認的輸出所有行。

2,顯示和編輯行

輸出文本第三行

 

一使用模式[tTangwei]定位行

 

刪除行

 

3,插入和修改行

使用a在第3行後插入一個新行

 

使用行尾匹配插入新行

 

使用換行符插入多行

 

使用r命令讀取exfile的內容並插入到第3行之後

 

4,替換文本和其他編輯指令

s/pattern1/pettern2/flag

y/pattern1/pattern2/flag

將匹配到的pattern1pattern2替換,sy都是替換,不同的是y要求pattern1patter2的長度必須相等。

 僅對第3行的第1個匹配到的2827替換

 

一次執行多個命令

 

5,其他

還有分支結構,一般不常用。

另外還有格式化文本數據抽取工具awk,功能比較強大

五,轉換和刪除重複命令tr

 tr命令用於處理字符轉換,刪除重複字符等任務。

1tr基本格式

tr [option] [string1] [string2]

tr的基本格式中,string1用於查詢字符串,string2用於轉換查詢到的字符串。tr不能讀取文件,因此如果要轉換文件中的內容,可以使用重定向輸入或管道的方法。

常用選項:

c∶使用string1字符集中的補集替換。要求的字符集爲ASCII
d∶刪除string1中包含的所有字符

s∶將所有重複出現的字符進行壓縮,只保留一個一個字符,即刪除重複的字符。

String1string2這兩個字符串的形式可以是字符的範圍,單個字符,多字符列表等。常見如下:

[a-z]: 小寫字母A-Z範圍內的字符及其組合而成的字符串

[A-Z]: 大寫字母A-Z範圍內的字符及其組合而成的字符串

[0-9]: 數字0-9範圍內的字符及其組合

[C*n]: C表示字符或字符組合,n表示出現次數。即字符或字符組合出現n次的字符串。

2tr轉換

小寫字母轉換大寫字母


3tr刪除重複

刪除重複字符,需要指定字符串或文本中可能存在重複的字符集合,因此僅需要使用string1即可。

 

刪除test2文本中空行

 

注意:tr命令在執行時會逐字符查詢處理,因此應特別注意字符集string1的選擇。

六,合併和分割工具

Sort處理的文本可以來自一個文本文件,也可以來自標準輸入和管道等。

1sort排序指令

sort [option] [file]

b∶按字段進行分類並忽略前面的空格或製表符

d∶按字典的順序進行排序,將除空格和字母以外的字符排除

f∶排序時忽略大小寫

g∶根據數值進行排序

i∶只考慮可打印的字符
M∶將字符按月份進行比較

n∶按數值進行比較排序

r∶反向排序

c∶測試文件內容是否已經排了序,若無任何返回信息,表示已排序
 k∶指定排序的關鍵字

m∶合併已經排序的文件,不進行排序
o∶將結果寫入文件內,不再輸出到標準輸出

s∶通過屏蔽最後的分類比較穩定排序

  t∶使用指定的字符作爲字段分隔符

T∶按臨時文件放入指定目錄中
 u∶如果與選項c一起使用,則檢查是否在排序時已經去除重複的行,沒有選項c時,則去除重複行

z∶用一個0字節作爲結束,而不是一個換行符
指定排序關鍵字爲第5個字段的第8個字符

 

合併文件,合併前的文件應該已經排好序

 

2cut數據剪切命令

cut [option] file

Cut命令工作時,以行爲單位剪切整個文本(對文本每一行生效)。

常用選項:

b∶表示操作的對象是字節

c∶表示操作的對象是字符

f∶表示操作的對象是字段

d∶指定字段分隔符,默認製表符Tab

s∶表示不包含沒有字段分割符的行,通常用於去掉註釋等

剪貼的範圍表示:

N∶表示第N個字節,字符或字段

N-∶表示從N到一行結束內的所有文本
N-M∶從NM之間的所有文本

-M∶從開始到M之間的所有文本
-∶從開始到結束的所有文本

剪切所有行的第5-8個字節

 

3paste數據粘貼指令

    paste [option] [file...]

常用選項:

   d∶對新生成的文本指定新的字段分隔符,默認製表符Tab
    s∶將粘貼的內容合併成行(即橫向粘貼)。

使用選項d指定第一第二字段用Tab製表符分割,第二第三使用”#”分割

 

4join數據連接指令

    join [option] file1 file2

常用選項:

a∶用於輸出兩個文件中有關聯的和沒有關聯的行,將有關聯的的行執行連接後輸出,沒有關聯的行按預定的格式輸出

e∶在文件1和文件2中查找關聯字段,如沒有關聯字段,則將無關聯的行相應的字段用參數指定的字符串替代

i∶在連接過程中忽略大小寫

j∶使用指定的字段作爲關聯字段連接

o∶格式化輸出

t∶設置字段間的分隔符,默認空格或者製表符Tab
 v∶與選項a作用相同,但只輸出無關聯的行

使用join命令時,join用數字1表示參數文件1,用數字2表示參數文件2

 

5uniq去除重複指令

Uniq經常用於去除一個文本中的重複行。Sort去除重複行,兩者不同。用sort去除重複行時,sort將整個文本中的多個重複的行去除,僅保留一行,而uniq會將多個連續重複的行去除,僅保留一行。

    uniq [option] [input [output]]

常用選項:

c∶用於輸出重複行的重複次數
d∶僅輸出重複的行

f∶忽略一些字段,僅比較指定的字段

i∶忽略大小寫

s∶忽略一些字符,僅比較指定的字符

u∶輸出不重複的行

w∶指定要比較的字符位置

使用f忽略第一個字段,從第2個字段的第3個字符開始去除重複的行

 

6split分割文件指令

split經常用於將很大的文件分割成若干個小文件。

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

常用選項:

l∶按行對文件進行分割
b∶按字節對文件進行分割

C∶按字節對文件進行分割,split會盡量保持一個整行

d∶使用數字作爲輸出文件的後綴

用選項l3行劃分爲一個文件,將劃分後的文件命名爲studentnew


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