1,在某個(gè)路徑下查文件。
在/etc下查找“*.log”的文件
find /etc -name “*.log”
2,擴(kuò)展,列出某個(gè)路徑下所有文件,包括子目錄。
find /etc -name “*”
3,在某個(gè)路徑下查找所有包含“hello abcserver”字符串的文件。
find /etc -name “*” | xargs grep “hello abcserver”
或者find /etc -name “*” | xargs grep “hello abcserver” > ./cqtest.txt
4,網(wǎng)上摘抄的幾個(gè)和查找文件或文件內(nèi)容相關(guān)的命令詳說(shuō):
正則表達(dá)式
\分別表示單詞的開(kāi)始和結(jié)束
ex: \ 以T或者t開(kāi)頭,om結(jié)尾的單詞
正則表達(dá)式的元字符集:
1) ^行首 /^love/ 以love開(kāi)頭的行;
2) $行尾 /love$/ 以love結(jié)尾的行;
3) . /l..e/ 匹配所有這樣的行,字母l后面緊跟任意兩個(gè)字符然后是e的行
4) * 重復(fù)0次或者任意多次前面字符
5) [x-y] 字符范圍
6) [^x-y] 排除字符范圍
7) \ 轉(zhuǎn)義字符
\ 界定單詞的開(kāi)頭和結(jié)尾
9) \( \) 標(biāo)記后面用到的匹配字符 \(love\)able \1er=loveable lover
10) x\{m,n\} 重復(fù)字符x至少m此,至多n次
—————————————————————————
—————————————————————————
grep家族
RE–regular expression; g: global; p: print
出了上面10種元字符集,grep還支持下面的RE
\w 字母或者數(shù)字
\W 非單詞字符(標(biāo)點(diǎn)符號(hào))
+ 重復(fù)一個(gè)或者多個(gè)前面的字符
| 或 love(a:b)表示lovea或者lobeb
?單個(gè)字符
grep返回狀態(tài)值($?) 0表示成功,1表示失敗,2表示沒(méi)有找到文件
rgrep遞歸訪問(wèn)目錄樹(shù)
—————————————————————————
ls -l |grep ^d 顯示目錄
grep -n -v -# -A# -B#
-i 不區(qū)分大小寫(xiě)
-n 顯示匹配行和行號(hào)
-v只顯示不匹配行
-#顯示匹配行上下#行
-A#匹配行后面打印#行
-B#匹配行前面打印#行
-c 只輸出匹配行的行數(shù)
-h 查詢(xún)多文件的時(shí)候不顯示匹配的文件名字
-l 查詢(xún)多文件只顯示匹配的文件名
-s 不顯示錯(cuò)誤信息
grep與正則表達(dá)式同用
grep “^[^abc]” *.f 提取行首不是abc的行
grep “[0-9]\{3\}[8]” *.f 提取類(lèi)似xxx8的行,x表示任意數(shù)字
grep “a\{2\}” *.f 顯示a至少出現(xiàn)兩次的行,注意grep是以行處理單位的
grep -n “^$” file 列出空行的行號(hào)
-E參數(shù),可以使用”與”和”或”模式
grep -E “abc | def” *.f 顯示包含abc或者def的行
ex:
ls -l | grep “^$” 顯示目錄
ls -l | grep “^d” 顯示文件
ls -l | grep “^d..x..x..x” 顯示特定權(quán)限的目錄
ps aux | grep “httpd” |grep -v “grep”
—————————————————————————
—————————————————————————
**使用find和xargs
1. find pathname -options [-print -exec -ok]
-optinos
1)-name:按照文件名查找
find ~ -name “*.txt” -print
find ~ -name “[a-z][0-9].txt” -print
2)-perm:按照權(quán)限查找文件
find ~ -perm 755 -print 查找權(quán)限為755的文件
find ~ -perm 007 -print 查找o位置上具有7權(quán)限的文件
find ~ -perm 4000 -print 查找具有suid的文件
3)-prune
不在當(dāng)前目錄下查找
4)-user和-nouser
find ~ -user zhao -print 查找文件屬主是zhao的文件
find ~ -nouser -print 查找文件屬主已經(jīng)被刪除的文件
5)-group和-nogroup
find ~ -group zhao -print 查找文件群組是zhao的文件
6)按照時(shí)間
find ~ -mtime -5 -print 文件更改時(shí)間在5天內(nèi)的文件
find ~ -mtime +3 -print 文件更改時(shí)間在3天前的文件
find ~ -newer file1 -print 查找比文件file1新的文件
7)按照類(lèi)型查找
find ~ -type d -print 查找所有目錄
8)按照大小
find ~ -size +1000000C -print 查找文件大小大于1000000字節(jié)(1M)的文件
9)查找位于本文件系統(tǒng)里面的文件
find / -name “*.txt” -mount -print
-exec,-ok:find命令對(duì)于匹配文件執(zhí)行該參數(shù)所給出shell命令,相應(yīng)命令形式為: ‘command’ {} \;
-ok 在執(zhí)行命令前要確認(rèn)
find ~ -type f -exec ls -l {} \;
find / -name “*.log” -mtime +5 -ok rm {} \;
find . -name core -exec rm {} \;
使用-x dev參數(shù)
防止find搜索其他分區(qū)
find . -size 0 -exec rm {} \;
刪除尺寸為0的文件
2. xargs與-exec功能類(lèi)似
find ~ -type f | xargs ls -l
find / -name “*.log” -type f -print| xargs grep -i DB0
find . -type f |xargs grep -i “Mary”
在所有文件中檢索字符串Mary
ls *~ |xargs rm -rf
刪除所有以~結(jié)尾的文件
—————————————————————————
—————————————————————————
SED:
=====
sed [options] sedcommand inputfile >outputfile
sed不接觸初始輸入文件,對(duì)其不做修改,若想保存改動(dòng),重要將輸出重定向到一個(gè)文件即可
a\: 當(dāng)前行后面加入一行或者文本
c\: 用信文本替換本行的文本
d: 刪除一行
D: 刪除模板塊的第一行
i\: 在當(dāng)前行上面插入文本
h: 拷貝模板塊的內(nèi)容到內(nèi)存緩沖區(qū)
H: 追加模板塊的內(nèi)容到內(nèi)存緩沖區(qū)
g: 獲得內(nèi)存緩沖區(qū)內(nèi)容,并替換當(dāng)前模板中的文本
G: 獲得內(nèi)存緩沖區(qū)內(nèi)容,并追加到當(dāng)前模版塊文本的后面
n: 讀取下一個(gè)輸入行,用下一個(gè)命令處理新行而不是第一個(gè)命令
N: 追加下一個(gè)輸入行到模版塊后面,并在二者間插入一個(gè)新行,改變當(dāng)前行的號(hào)碼
p: 打印模板塊的行
P: 打印模板塊的地一行
q: 退出sed
r file: 從file中讀行
!: 表示后面的命令對(duì)所有沒(méi)有選中的行起作用
s/re/strint/: 用string替換正則表達(dá)式re
=: 打印當(dāng)前行號(hào)
#command: 把注釋擴(kuò)展到下一個(gè)換行符號(hào)前
l 打印匹配行,包括顯示控制符號(hào)
**替換標(biāo)記
g: 行內(nèi)全部替換
p: 打印行
w: 把行寫(xiě)入一個(gè)文件
x: 互換模板塊和緩沖區(qū)中的文本
y: 把一個(gè)字符翻譯成另外一個(gè)字符
**sed中元字符可以使用正則表達(dá)式中所有的
新加:
& 保存搜索字符 s/love/**&**/ 用**love**代替love
**sed定位文本的方式
x 行號(hào)
x-y 從x行到y(tǒng)行
/patern/ 查詢(xún)包括patern的行
x,y! 不包括指定x-y行號(hào)的行
ex:
sed ‘/Tom/d’ file
刪除包含Tom的行;
sed ‘/Tom/!d’ file
刪除所有不包含Tom的行;
sed -n /north/p’ file
打印包含north的行;
sed ‘3d’ file
刪除第三行;
sed ’3,$d’ file
刪除第三行到最后一行;
sed ‘$d’ file
刪除最后一行;
sed ‘/north/d’ file
刪除包含north的行;
sed -n ‘s/west/north/g’ file
替換所有west為north;
sed -n ‘s/^west/north/p’ file
一行的開(kāi)頭的west用north替換,并打印發(fā)生替換的行;
sed ‘s/[0-9][0-9]$/&.5/’ file
所有以?xún)蓚€(gè)數(shù)字結(jié)尾的行,最后兩個(gè)數(shù)字被他們自己替換并附加.5;
sed -n ‘s/\(Mar\)got/\1ianne/p’ file
將Margot替換為Marianne,并打印發(fā)生替換的行;
sed ‘s#abc#ABC#g’ file
所有abc由ABC替換,(所有s后面緊跟的字符都被認(rèn)為是新的分隔符);
sed ‘/west/,/east/p’ file
打印包含west行和包含east行中間的所有行;
sed ’1,/east/s/$/**A**/’ file
地一行和包含east行之間的所有行的行尾加上字符串**A**;
sed -e ’1,3d’ -e ‘s/aa/bb/’ file
先刪除1到3行,然后用bb替換aa;
sed ‘/Sam/r file1′ file
將文件file1中的內(nèi)容附加在包含Sam的行后面;
sed ‘/Sam/w file1′ file
將還有Sam行寫(xiě)入文件file1中;
sed ‘/^north /a\new line second line’ file
所有以north加空格開(kāi)頭的行后面附加上兩行文本,a\表示追加文本,\表示換行(tcsh中需要,bash中不需要);
sed ‘/^north/i\new line’ file
在行首為north的行前面插入一個(gè)新行;
sed ‘/norht/{n; s/aa/bb/;}’ file
首先匹配含有north的行,然后執(zhí)行一組命令,n表示移到下一行,并用bb代替aa;
sed ’1,3g/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/’ file
將1到3行中的所有小寫(xiě)字母用大寫(xiě)字母替換;
sed ‘/Lewis/{s/Lewis/bbb;q;}’ file
首先找到匹配Lewis的行,然后用bbb代替Lewis,接著q退出seq;
sed -e ‘/north/h’ -e ‘$G’ file
首先找到包含norht的行,h拷貝到內(nèi)存緩沖區(qū),然后到文件隨后一行($),G附加在最后一行后面;
sed -e ‘/we/{h;d;}’ -e ‘/ct/{G:}’ file
查找包含we的行,拷貝并且刪除他,然后查找包含ct的行,將拷貝內(nèi)容附加到他后面;
sed -e ‘/north/h’ -e ‘$g’ file
首先找到包含norht的行,h拷貝到內(nèi)存緩沖區(qū),然后到文件隨后一行并覆蓋他;
sed -n ‘l’ file
打印所有包含不能打印字符的行。
sed -n ‘/.*ing/p’ file
顯示含有以ing結(jié)尾單詞的行;
sed -n ‘/music/=’ file
打印含有music的行號(hào);
sed ‘^$d’ file
刪除空行
sed ‘s/^/abcd/g’ file
在行首填加abcd
sed ‘s/$/abcd/g’ file
在行尾填加abcd
sed ‘s/rm$/played &/g’ file
&表示在替換的時(shí)候保留被替換的詞(rm–played rm)
sed ‘s/^M//g’ file
去掉行尾的^M (^M的輸入,先按ctrl+v然后按enter即可即可)
—————————————————————————
—————————————————————————
gawk程序:
awk [-F 域分隔符] ‘commands’ inputfile
awk執(zhí)行時(shí),其域標(biāo)志符為$1,$2,$3………$n,$0表示所有的域
awk -v var=value 賦值給一個(gè)用戶(hù)定義的變量
awk ‘pattern’ file
awk ‘{action}’ file
awk ‘pattern {action}’ file
ex:
awk ‘{print $0}’ file
打印所有的域
awk ‘/Mary/’ file
打印包含file中包含Mary的行;
awk ‘{print $1}’ file
打印文件的第一列(第一個(gè)域);
awk ‘/Mary/ {print $1,$2}’ file
打印文件file包含Mary的行的第一和第二個(gè)域;
df | awk ‘S4>75000′
打印可用空間大于75000的文件系統(tǒng)
date | awk ‘{print ” month:”, $2, “\n year:” $6}’
格式化date的輸出;
awk ‘BEGIN{OFMT=”%.2f”; print 1.25463}’
指定數(shù)字輸出格式,小數(shù)點(diǎn)后面保留兩位有效數(shù)(1.25);
awk ‘/[ab]cdef/’ file
打印匹配acdef或者bcdef的行;
awk ‘{print NR, $0}’ file
awk ‘{print $0, NR}’ file
NR當(dāng)前記錄數(shù),每處理一個(gè)記錄NR就加1
上面的命令相當(dāng)于在每一行后面加上一個(gè)行號(hào);
NF則記錄每一行的域的個(gè)數(shù);
awk -F ‘[ :\t]‘ ‘{print $0}’ file
指定域分隔符為空格、:或者tab
awk ‘/^[A-Z][a-z]+/’ file
打印所有以一個(gè)大寫(xiě)字母開(kāi)頭,然后是一個(gè)或者多個(gè)小寫(xiě)字母的行;
awk ‘$1~/[Bb]ill/’ file
第一個(gè)域匹配Bill或者bill的行;
awk ‘$1!~/ly$/’ file
第一個(gè)域末尾不是ly的行;
awk ‘/^(No|no)/’ file
打印行首為No或者no的行;
awk ‘BEGIN {print “file head \n”} {print $1 \t $4}’ file
awk ‘BEGIN {print “file head \n”} {print $1 \t $4}’ file |tee out.file
打印文件的時(shí)候附加一個(gè)文件頭
awk ‘BEGIN {print “file head \n”} {print $1 \t $4} END {print “end of file”}’ file
打印文件的時(shí)候附加一個(gè)文件頭和文件尾
awk中使用正則表達(dá)式
awk ‘{if($1~/hello/) print $0}’ file
如果域1中包含hello,就打印所有的域
~//表示匹配正則表達(dá)式,!~//表示不匹配正則表達(dá)式
awk ‘{if($6,>=,==,!=,~,!~(匹配,不匹配)
awk ‘$3==5346′ file
第三個(gè)域等于5346,就打印出該行;
awk ‘$3>5000 {print $1}’ file
第三個(gè)域大于5000就打印該行第一個(gè)域
awk ‘{max={$1>$2}?$1:$2; print max}’ file
如果第一個(gè)域大于第二個(gè)域,max=$1否則=$2,打印最大值
awk ‘{print ($1==11?”high\t” $2:”low\t” $2)}’ file
&&邏輯和,||邏輯或,!邏輯非
awk ‘$2==$5 && $3>5′ file
awk ‘/Tom/,/Jary/’ file
Tom第一次出現(xiàn)和Jary第一次出現(xiàn)之間的所有行;
awk ‘/north/ {print $3+10}’ file
包含north行的地三個(gè)域加10;
awk ‘$3==”aa” {$2=”dd”; print $0}’ file
將地三個(gè)域?yàn)閍a的行的第二域變成dd,并打印該行;
**awk編程:
使用變量
awk ‘$1~/Tom/ {wage=$2+$3; print wage}’ file
先掃描第一個(gè)域,如果匹配Tom,就將第二和第三域的總和賦值給變量wage并輸出;
awk ‘BEGIN{FS=”:”; OFS=”\t”;ORS=”\n\n”}{print $0}’ file
處理文件前設(shè)置
域分隔符(FS)為(:)
輸出域分隔(OFS)為(\t)
輸出記錄分隔符(ORS)為(\n\n)
awk ‘END{print “The number of record is:’ NR}’ file
處理完文件后執(zhí)行END語(yǔ)句
輸出總記錄數(shù)
awk ‘/Mary/{count++} END{print “Mary was found” count “times”}’ file
計(jì)數(shù)文件中Mary出現(xiàn)的次數(shù);
**awk輸入輸出重定向
awk ‘$4>=70 {print $1, $2 >”outfile”}’ file
結(jié)果重定向到文件outfile中
awk ‘BEGIN{“date” |getline d; print d}’
將date結(jié)果輸給getline函數(shù),并打印
(getline從標(biāo)準(zhǔn)輸出,管道等獲得輸入)
awk ‘BEGIN{“date” |getline d; split(d,mon); print mon[1] mon[2]}’
將date結(jié)果輸給getline函數(shù),slpit將d分解成數(shù)組,打印數(shù)組第2個(gè)變量
**split函數(shù):split(string,array,field seperator)
awk ‘BEGIN{while(“ls”|getline) print}’
依次輸出ls的每一項(xiàng)
awk
‘BEGIN{print “what is your name?”; getline name 0) {lc++; print lc ” ” a}}’
awk ‘BEGIN{while(getline a 0) {lc++; print lc}}’
如果文件不存在,getline返回-1
到達(dá)文件尾返回0
讀到一行返回1
讀取文件/etc/passwd,計(jì)數(shù)行數(shù)
**awk控制語(yǔ)句
if語(yǔ)句:
awk ‘{if($6>50) print $1 “too high”}’ file
awk ‘{if($6>20 && $250}{x++; print x} else {y++;print y}’ file
awk ‘{if($1~/peter/){next} else {print}}’ file
如果第一個(gè)域包含peter,awk就忽略這一行,讀取文件的下一行,腳本從頭開(kāi)始執(zhí)行;
循環(huán)語(yǔ)句:
awk ‘{i=1; while(i file
cat -v file 顯示文件,包括其中的控制符(-v)
cat -n file 為每一行編號(hào)
cat -b file 每個(gè)非空行編號(hào)
cat -T file 以^I顯示tab
3.
管道 | 把一個(gè)命令的輸出傳遞給另外一個(gè)命令為輸入
ex:
ls | grep file.doc
查找文件file.doc
who | awk ‘{print $1 “\t” $2}’ 只顯示用戶(hù)名和所在終端
df -h | awk ‘{print $1}’ |grep -v “filesystem” (-v表示輸出不包括filesystem的項(xiàng)目)
df -h | awk ‘{print $1}’ |grep -v “filesystem” |sed ‘s/\/dev\///g’ 顯示設(shè)備的時(shí)候不顯示/dev/
4.tee
who | tee who.txt 輸出到屏幕的同時(shí)輸出到文件
who | tee -a who.txt 附加在文件的后面
5.文件重定向
ls -l |grep ^d >file.out 所有目錄名字重定向到一個(gè)文件
cat /etc/passwd | awk -F: ‘{print $1}’ |sort >a.out (-F:指定分隔符為:)
cat >file.out reboot
at> ctrl+D
3小時(shí)后reboot
3.
bc – 計(jì)算器
scale=3 設(shè)置小數(shù)點(diǎn)后數(shù)字為數(shù)
ibase=2 二進(jìn)制運(yùn)算
4.
ls -d dir
只顯示目錄而不顯示其下面的文件。
5.
sync
更新superblock并把它寫(xiě)入硬盤(pán)
6.
scp user@host:/path/file1 user@host:/path/file
服務(wù)器間拷貝文件
****************************************************************************************
當(dāng)我們要查找文件中某些內(nèi)容,或者在顯示文件名時(shí)過(guò)濾出某一種類(lèi)的文件,這時(shí)就需要用到grep。因?yàn)橹С终齽t表達(dá)式,使得grep命令的搜索功能非常強(qiáng)大,它是使用好linux必須掌握的一個(gè)命令。一、常用命令grep 999 **/* 列出當(dāng)前目錄(包括子目錄)中所有含有999字符的行。grep '999' server.log 列出server.log中含有999字符的行。將999去掉引號(hào)或換成雙引號(hào),效果一樣。grep -c '999' server* 統(tǒng)計(jì)所有以server開(kāi)頭的文件中,含有999字符的行數(shù)(注:不是個(gè)數(shù))grep '999' aa.txt bb.txt cc.txt 顯示aa.txt, bb.txt, cc.txt三文件中含有999字符的行。grep '[a-z]\{5\}' server.log 利用正則表達(dá)式來(lái)搜索文件。正則表達(dá)式的詳細(xì)說(shuō)明見(jiàn)后面。grep '2006-08-23 17:50:[0-1][0-9]' wxxr.boss.log 搜索某日某分00秒到19秒之間的日志ls | grep 'server' 這里是在通道里來(lái)使用grep,將ls顯示的文件名,過(guò)濾出含有server字符的文件名。二、參數(shù)-2 匹配行上下2行也顯示出來(lái)-b 在行之前顯示此行所在的字符號(hào)(字符號(hào)指:在此之前字符的字符數(shù))-c 匹配行的行數(shù)-f 從某文件中提取要匹配的字符,如:grep -f abc server.log從abc文件中提取要搜索的字符 (注:abc中可以有多行,每行是"或"的關(guān)系,即列出各行字符所匹配的內(nèi)容。所有匹配行按照其在文件中的順序顯示,即不按abc中的匹配字符來(lái)分類(lèi)顯示)-h 當(dāng)搜索多個(gè)文件時(shí),不顯示每行之前的文件名前綴。-i 忽略搜索字符的大小寫(xiě)-l 顯示匹配搜索字符的文件的文件名-L 顯示不匹配搜索字符的文件的文件名-n 在每行前加上行號(hào)-s 不顯示關(guān)于不存在或者無(wú)法讀取文件的錯(cuò)誤信息。-v 顯示所有不匹配的行。-w 把搜索字符當(dāng)作一個(gè)完整單詞來(lái)匹配三、正則表達(dá)式^jboss 匹配所有以jboss開(kāi)頭的行 jboss$ 匹配所有以jboss結(jié)尾的行jbo.s .表示任意一字符,匹配jboss, jbo7s,不匹配jbos。 jbo*s *表示0或多個(gè)的前一字符,匹配jbs, jbos, jboos, jboooosjbo[sa]s [] 指定字符范圍,匹配jboss, jboasjbo[^sb]s [^]指定不允許匹配的字符范圍,不匹配jboss, jbobsx\{2\} 匹配2個(gè)x字符,即匹配字符xx x\{2,\} 至少匹配2個(gè)x字符x\{2,4\} 匹配2-4個(gè)x\w 匹配文字和數(shù)字字符,和[A-Za-z0-9]等價(jià)\W 與\w相反,匹配一個(gè)或多個(gè)非文字和非數(shù)字字符,如點(diǎn)號(hào)句號(hào)等。\bjboss 匹配單詞,如jboss, jboss888,但不匹配8jboss。也就是jboss之前必須是空格或逗句號(hào)等。[0-9]{11} 11個(gè)數(shù)字四、egrep(等價(jià)于grep -E)擴(kuò)展支持的正則表達(dá)式c+ 匹配一個(gè)或多個(gè)c字符。[a-c]+,則匹配一個(gè)或多個(gè)a或b或c字符。c? 匹配零個(gè)或多個(gè)c字符a|b 匹配a或b() 分組符號(hào),作用類(lèi)似算術(shù)里的()x{2},x{2,},x{2,4} 作用等同于沒(méi)有用-E參數(shù)時(shí)的x\{2\},x\{2,\},x\{2,4\}五、fgrep(等價(jià)于grep -F)當(dāng)搜索字符里包含有正則表達(dá)式的專(zhuān)用符號(hào),然而我們卻不想啟用正則表達(dá)式,就是搜索原字符,這時(shí)就可以用grep -F。例:grep -F 'jbo[^sb]s' server.log ,搜索server.log里包含'jbo[^sb]s的字符(^[]不再是正則表達(dá)式里的專(zhuān)用字符)六、其他和其他命令相結(jié)合,可把grep用作一個(gè)過(guò)濾器。比如我們監(jiān)控日志時(shí),我們只關(guān)心某一個(gè)包下的日志,這時(shí)我們可以這樣來(lái)寫(xiě):tail -f server.log | grep 'com.wxxr.chengang'
posted on 2013-06-07 15:16
聶文龍 閱讀(4830)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
Linux