1.find 查找到想要的文件或目錄
格式:find [path] [-OPTION] [-exec |grep |xargs -ok -print | ……] [command {} \;]
參數:
-type 以類型查找
f 文件
d 目錄
-name 以文件名查找
-size 根據問價大小來查找。eg: find /data -size 5M
-perm 根據文件權限查找。 eg: find /data -perm 755
-maxdepth n 顯示的最大層數。(這個參數通常放在第一個,否則的話會有警告信息)。 eg: find /data/ -maxdepth 2 -type d
-exec command {} \; 對匹配的文件執行該參數給出的命令。形式為 command {} \;
-ok 與-exec作用相同。區別在於,執行命令之前,都會給出提示,讓用戶確認是否執行。
-mtime -n/+n 根據修改時間找出對應的文件。-n指n天以內;+n指n天以前。天數前面必須要有加號或減號,否則不會有查找結果。
eg:find -type f -name "*.log" -mtime +7|xargs ls -l 或 ls -l $(find -type f -name "*.log" -mtime 7) 或 find -type f -name "*.log" -mtime 7 -exec ls -l {} \;
! 取反。注意:符號前后至少一個空格。 eg: find /data -maxdepth 2 -type d ! -name "."
find不加任何參數-----顯示當前目錄下的所有文件(包括子目錄及子目錄內的文件)
2.grep 過濾。在文件中找到想要的內容
格式:grep 參數 查找用的關鍵字符 文件名
參數:
-v 排除。 eg:grep -v "num" test.txt 將test.txt文件內,非包含num字符的 行 顯示出來
-An 將匹配到的字符所在行顯示出來,並顯示次行下面的n行。 eg:grep A15 “num” test.txt 將test.txt文本內,匹配到num字符的行顯示,並顯示此行下面15行
-n 顯示匹配到的字符所在的行內容,及其行號。
-o 顯示grep的執行過程,即每次匹配到的內容。涉及到正則的話,就是正則每次匹配到的內容。
egrep 支持高級正則。相當於grep -E
3.sed 取行。多用於替換。默認會顯示文件的全部內容。也可用於查找內容(這個用的比較少)
格式:sed 參數 匹配行/替換/查找的字符 文件名
參數:
-n 取消默認輸出。即取消默認顯示全部內容,一般與p搭配使用。
-r 表示支持擴展正則。
-i 修改文件內容
eg:
取行:sed -n '20,30p' test.txt 顯示test.txt文件第20行到第30行的內容。
sed -n '20p' test.txt 顯示test.txt文件第20行的內容。
sed -n '3,$p' test.txt 顯示第3行到最后一行。
注意:顯示前多少行或后多少行,可以用head或tail命令。搭配sed顯示具體的某行或區間行。關於行的顯示查看就能完全搞定。
替換:sed -i 's#找誰#替換為什么#g' test.txt eg: sed -i 's#nm#DDD#g' test.txt 將test.txt文件內的nm全部替換為DDD
注:替換時sg中間的三個符號,什么都可以,但是一般常用@或#,即s@@@g或s###g
搭配find可替換多個文件內容:
find /data/ -type f -name "*.sh" |xargs sed -i 's#abc#kpl#g' 找出/data文件夾內所有以.sh結尾的文件,替換所有文件內的abc為kpl.
sed -n '2s#abc#123#gp' test.txt 將第2行的abc替換為123,顯示出來。 這里若是加-i的話,則會用處理的結果行替換整個文件的內容,如:sed -n '2s#abc#123#gp' test.txt -i ,則會把第2行中的abc全部替換為123后,清空文件,寫入第2行內容,見下圖:
‘=’表示給每行加行號
替換具體某一行內容時,不能加p參數,只要-i即可,否則會出錯,會多出一行來。這里還需要再研究研究:
sed -i ‘2s#abc#123#g’ test.txt 這樣沒有參數p,會正常的將第2行abc替換為123.
sed -i '2s#abc#123#gp' test.txt 這樣的有參數p,會在替換后多出一行來,內容和第2行一致.見圖:
查找:sed -n '/abc/p' test.txt 將文件內包含abc的行顯示.
sed '/abc/d' test.txt 將文件內沒有包含abc字符的行,均顯示出來(這里如果加-n的話就什么都不顯示)。-----一般根據字符查找行用grep,sed這樣用起來不方便,也用的少.
4.awk 取列。取行。計算。
格式:awk 參數 取行/取列/查找的字符 文件名
awk ‘找誰{做什么}’ 文件 eg:awk ‘NR==2{print $3}’ test.txt 取出test.txt文件第2行的第3列內容
參數:
-F 指定分隔符(未指定時,默認空格作為分隔符)。 eg:awk -F ”,“ ‘{print $3}’ test.txt 用逗號作為分隔符,顯示第3列
-F "[ ,]" 指定多個分隔符。 eg:awk -F "[ ,]" '{print $3,$5}' test.txt 用逗號或者空格作為分隔符,顯示第3列和第5列
-F "[ ,]+" 指定多個分隔符。這里的+號表示,以連續出現的空格或逗號作為分隔符。
$n 第n列
$0 表示一整行的內容
NR 表示行號
{print }
取列:
awk ‘{print $3]’ test.txt 顯示第3列
awk '{print $2,$6}' test.txt 顯示第2列,第6列
awk '{print $2" ,aa"$4}' tets.txt 顯示第2列,第4列。大括號內,雙引號里的內容會原封不動的輸出。
取行:
awk ‘NR==20,NR==30’ test.txt 顯示第20行到第30行
awk ‘NR==20’ test.txt 顯示第20行
查找:
awk '/123/' test.txt 顯示文件內包含123字符的行
awk ‘!/123/’ test.txt 顯示文件內不包含123字符的行