1. 程式人生 > >Linux體系機構中的公共函數庫和shell編程

Linux體系機構中的公共函數庫和shell編程

rsquo tor find stream ESS 過程 當前目錄 exp lac

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編程