Linux體系機構中的公共函數庫和shell編程
1、使用echo $SHELL 查看當前的shell版本
2、通過cat /etc/shells 查看本機器支持的shell版本
3、chsh -s 後接shell路徑
一、如何找到特定的文件
find
語法:find path [options] params
作用:在指定的目錄下查找文件
例:
1)、查找當前目錄下的target3.java文件
find -name "target3.java"
2)、從根目錄查找target3.java文件
find / -name "target3.java"
3)、查找當前用戶的home目錄下,以target打頭的文件
find ~ -name “target*” ---“*” 通配符
find ~ -iname “target*” ---"-i"不區分大小寫
二、檢索文件內容
1、grep
語法:grep [options] pattern file
全稱:Global Regular Expression Print
作用:查找文件裏符合條件的字符串
例:
1)、從target打頭的文件中查找,包含“moo”字符串的行
grep "moo" target*
2、管道操作符|
可將指令連接起來,前一個指令的輸出作為後一個指令的輸入
例:
1)、從根目錄查找以target開頭的文件
find ~|grep "target"
2)、從bac-plat-al-data.info.log中查找partial[true]的行
grep ‘partial\[true\]‘ bac-plat-al-data.info.log
3)、從2)的結果中查找engine的信息,engine由數字和字母組成
grep ‘partial\[true\]‘ bac-plat-al-data.info.log| grep -o ‘engin\[[0-9a-z]*\]‘
4)、查看當前tomcat的進程,grep -v 過濾掉當前的指令
ps -ef| grep tomcat |grep -v "grep"
使用管道註意的要點:
a)、只處理前一個命令正確輸出,不處理錯誤的輸出
b)、右邊命令必須能夠接收標準輸入流,否則傳遞過程中數據會被拋棄
例:find ~|grep "target" |echo 不會輸出任何數據
c)、常用來接收管道的命令有sed,awk,grep,cut,head,top,less,more,wc,join,sort,split等
三、對文件內容做統計
awk
語法:awk [options] ‘cmd‘ file
1)、一次讀取一行文本,按輸入分隔符進行切片,切成多個組成部分
2)、將切片直接保存在內建的變量中,$1,$2...($0表示行的全部)
3)、支持對單個切片的判斷,支持循環判斷,默認的分隔符為空格
例:
1)、篩選出netstat.txt中的第一列和第四列
awk ‘{print $1,$4}’ netstat.txt
2)、在1的基礎上進一步過濾,篩選出Proto為tcp並且Recv-Q等於1的列
awk ‘$1="tcp" && $2==1{print $0}‘ netstst.txt
顯示第一行
awk ‘($1=="tcp"&& $2==1) || NR==1 {print $0}‘ netstat.txt
3)、awk默認分隔符是空格“ ”,現在以“,”為分隔符打印出第二列
awk -F "," ‘{print $2}‘ test.txt
4)、打印出partial為true並且以engine分組,統計出現的次數
grep ‘partial\[true\]‘ bac-plat-al-data.info.log| grep -o ‘engin\[[0-9a-z]*\]‘|awk ‘{enginearr[$1]++} END {for(i in enginearr) print i "\t" enginearr[i]}‘
四、批量替換文件的內容
sed
語法:sed [option] ‘sed command‘ filename
1)、全名stream editor,流編輯器
2)、適用用於對文本的編輯
例:
1)、修改頭部“Str”,改為“String”
sed -i ‘s/^Str/String/’ replace.java
2)、修改每一行最尾部的“.”改成“;”
sed -i ‘s/\.$/\;/‘ replace.java
3)、將每一行的"jack"替換成"me"
sed -i ‘s/jack/me/g‘ replace.java --如果不加g,將替換每一行首次出現的jack
4)、依據某規則刪除數據;刪除空行
sed -i ‘/^ *$/d‘ replace.java --此時沒有前面的s了,因為s是對字符串的操作
5)、刪除包含Integer的行
sed -i ‘/Integer/d‘ replace.java
Linux體系機構中的公共函數庫和shell編程