一,本章內容
1,查找工具find
2,查找文本工具grep
3,sed流編輯器
4,轉換和刪除重複命令tr
5,合併和分割工具
備註:本Linux系統爲RHEL5.3
二,查找工具find
找出不知道在什麼地方的文件,或是找出某一特徵的文件,可以使用find。
1,find基本格式
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,按文件的屬主或屬組查找
當管理員件將一用戶或用戶組從系統中清除時,可能需要將該用戶或用戶組的文件收集起來保存一段時間。
7,find工具其他參數
使用參數-o將兩個不同的參數連接起來
在除了/etc目錄的整個目錄中查找以”.conf”結尾的文件
在本地系統查找
8,使用exec和ok處理查找到的文件
使用 exec, ok參數執行shell命令的格式如下:
-exec [Shell命令] { } \;
-ok [Shell命令] { } \;
9,使用xargs命令處理查找到的文件
使用exec和ok處理查找到的文件時,存在一些缺陷:
[1] 系統對參數exec和ok傳遞給shell命令的文件列表長度有一定限制,當find命令查找到用戶很多時,會出現參數列表溢出等錯誤
[2] 參數對find找到的每一個文件發起一個相應的處理進程,當find命令查找到用戶很多時,會影響系統性能。
Xargs構造一個參數列表交給命令執行,與exec,ok相比,xargs不一次獲取並處理find找到的所有文件,每次獲取一部分,處理完畢再獲取。整個過程xargs都只發起一個處理進程,對系統性能影響很小。
使用xargs時需要藉助管道。
10,find工具應用實例
使用exec和ok處理查找到的文件時,存在一些缺陷:
[1] 查找需要備份文件
[2] 列表過期文件
三,查找文本工具grep
從一大堆的命令輸出或是文本文件中找到一兩行的關鍵內容,可以使用grep工具進行篩選。
1,grep基本格式
grep [option] pattern [file]
grep工具在文件file中找到與字符串pattern匹配的內容,如果找到,則將整行輸出到標準輸出。常用選項:
i:忽略大小寫
n:將結果輸出的同時,也輸出該行的行號
s:在沒有查到匹配的內容時,不顯示錯誤信息
l:從多個文件中查找時,只輸出找到匹配內容的文件名稱
h:從多個文件查找時,只輸出匹配的內容,不顯示文件名稱
c: 只輸出匹配內容的總行數
v:反轉查找,即輸出匹配內容以外的行
grep在工作時,總是以行爲單位,先將文本第一行讀入緩衝區進行查找,如找到匹配的字符串,就輸出整行,如沒有,就丟棄緩衝區內容並讀入下一行文本繼續查找,直至文本結束。
2,grep命令使用
系統有一個學生登記表sudent
[1] 查找包含92的行
[2] 使用c選項統計查找到的總行數
[3] 反轉查找,查找不含有taix和lixia的行
[4] 多文件查找
3,行首,行尾匹配查找
利用文件的行首或行尾進行查找。
4,grep應用實例
[1] 精簡配置文件
除去配置文件中的註釋行,和默認配置語句。
四,sed 流編輯器
sed通常用來對多個文件或命令輸出進行重複處理。
sed在工作時,總是以行爲單位,先將文本第一行讀入被稱爲模式空間的臨時緩衝區內。然後再讀取第一條編輯指令,使用指令中定義的模式和行號查找,編輯文本。完成編輯後,將結果輸出並讀取下一行,重複這個過程直到文本結束。除了模式空間以外,sed還使用一個稱爲保留空間的臨時緩衝區,保留空間通常用於暫存編輯內容。
1,sed基本格式
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/∶表示匹配pattern1和pattern2的所有行(需用選項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
將匹配到的pattern1用pattern2替換,s與y都是替換,不同的是y要求pattern1與patter2的長度必須相等。
僅對第3行的第1個匹配到的28用27替換
一次執行多個命令
5,其他
還有分支結構,一般不常用。
另外還有格式化文本數據抽取工具awk,功能比較強大
五,轉換和刪除重複命令tr
tr命令用於處理字符轉換,刪除重複字符等任務。
1,tr基本格式
tr [option] [string1] [string2]
在tr的基本格式中,string1用於查詢字符串,string2用於轉換查詢到的字符串。tr不能讀取文件,因此如果要轉換文件中的內容,可以使用重定向輸入或管道的方法。
常用選項:
c∶使用string1字符集中的補集替換。要求的字符集爲ASCII
d∶刪除string1中包含的所有字符
s∶將所有重複出現的字符進行壓縮,只保留一個一個字符,即刪除重複的字符。
String1和string2這兩個字符串的形式可以是字符的範圍,單個字符,多字符列表等。常見如下:
[a-z]: 小寫字母A-Z範圍內的字符及其組合而成的字符串
[A-Z]: 大寫字母A-Z範圍內的字符及其組合而成的字符串
[0-9]: 數字0-9範圍內的字符及其組合
[C*n]: C表示字符或字符組合,n表示出現次數。即字符或字符組合出現n次的字符串。
2,tr轉換
小寫字母轉換大寫字母
3,tr刪除重複
刪除重複字符,需要指定字符串或文本中可能存在重複的字符集合,因此僅需要使用string1即可。
刪除test2文本中空行
注意:tr命令在執行時會逐字符查詢處理,因此應特別注意字符集string1的選擇。
六,合併和分割工具
Sort處理的文本可以來自一個文本文件,也可以來自標準輸入和管道等。
1,sort排序指令
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個字符
合併文件,合併前的文件應該已經排好序
2,cut數據剪切命令
cut [option] file
Cut命令工作時,以行爲單位剪切整個文本(對文本每一行生效)。
常用選項:
b∶表示要操作的對象是字節
c∶表示要操作的對象是字符
f∶表示要操作的對象是字段
d∶指定字段分隔符,默認製表符Tab
s∶表示不包含沒有字段分割符的行,通常用於去掉註釋等
剪貼的範圍表示:
N∶表示第N個字節,字符或字段
N-∶表示從N到一行結束內的所有文本
N-M∶從N到M之間的所有文本
-M∶從開始到M之間的所有文本
-∶從開始到結束的所有文本
剪切所有行的第5-8個字節
3,paste數據粘貼指令
paste [option] [file...]
常用選項:
d∶對新生成的文本指定新的字段分隔符,默認製表符Tab
s∶將粘貼的內容合併成行(即橫向粘貼)。
使用選項d指定第一第二字段用Tab製表符分割,第二第三使用”#”分割
4,join數據連接指令
join [option] file1 file2
常用選項:
a∶用於輸出兩個文件中有關聯的和沒有關聯的行,將有關聯的的行執行連接後輸出,沒有關聯的行按預定的格式輸出
e∶在文件1和文件2中查找關聯字段,如沒有關聯字段,則將無關聯的行相應的字段用參數指定的字符串替代
i∶在連接過程中忽略大小寫
j∶使用指定的字段作爲關聯字段連接
o∶格式化輸出
t∶設置字段間的分隔符,默認空格或者製表符Tab
v∶與選項a作用相同,但只輸出無關聯的行
使用join命令時,join用數字1表示參數文件1,用數字2表示參數文件2
5,uniq去除重複指令
Uniq經常用於去除一個文本中的重複行。Sort去除重複行,兩者不同。用sort去除重複行時,sort將整個文本中的多個重複的行去除,僅保留一行,而uniq會將多個連續重複的行去除,僅保留一行。
uniq [option] [input [output]]
常用選項:
c∶用於輸出重複行的重複次數
d∶僅輸出重複的行
f∶忽略一些字段,僅比較指定的字段
i∶忽略大小寫
s∶忽略一些字符,僅比較指定的字符
u∶輸出不重複的行
w∶指定要比較的字符位置
使用f忽略第一個字段,從第2個字段的第3個字符開始去除重複的行
6,split分割文件指令
split經常用於將很大的文件分割成若干個小文件。
split [option] [input file] [output file]
常用選項:
l∶按行對文件進行分割
b∶按字節對文件進行分割
C∶按字節對文件進行分割,split會盡量保持一個整行
d∶使用數字作爲輸出文件的後綴
用選項l每3行劃分爲一個文件,將劃分後的文件命名爲studentnew