1,在某個路徑下查文件。 在/etc下查找“*.log”的文件 find /etc -name “*.log” 2,擴展,列出某個路徑下所有文件,包括子目錄。 find /etc -name “*” 3,在某個路徑下查找所有包含“hello abcserver”字符串的文件。 find /etc -name “*” | xargs grep “hello abcserver” 或者find /etc -name “*” | xargs grep “hello abcserver” > ./cqtest.txt 4,網上摘抄的幾個和查找文件或文件內容相關的命令詳說: 正則表達式 /分別表示單詞的開始和結束 ex: / 以T或者t開頭,om結尾的單詞 正則表達式的元字符集: 1) ^行首 /^love/ 以love開頭的行; 2) 行尾/love/ 以love結尾的行; 3) . /l..e/ 匹配所有這樣的行,字母l后面緊跟任意兩個字符然后是e的行 4) * 重復0次或者任意多次前面字符 5) [x-y] 字符范圍 6) [^x-y] 排除字符范圍 7) / 轉義字符 / 界定單詞的開頭和結尾 9) ( ) 標記后面用到的匹配字符 (love)able /1er=loveable lover 10) x{m,n} 重復字符x至少m此,至多n次 ————————————————————————— ————————————————————————— grep家族 RE–regular exPRession; g: global; p: print 出了上面10種元字符集,grep還支持下面的RE /w 字母或者數字 /W 非單詞字符(標點符號) + 重復一個或者多個前面的字符 | 或 love(a:b)表示lovea或者lobeb ?單個字符 grep返回狀態值(?) 0表示成功,1表示失敗,2表示沒有找到文件 rgrep遞歸訪問目錄樹 ————————————————————————— ls -l |grep ^d 顯示目錄 grep -n -v -# -A# -B# -i 不區分大小寫 -n 顯示匹配行和行號 -v只顯示不匹配行 -#顯示匹配行上下#行 -A#匹配行后面打印#行 -B#匹配行前面打印#行 -c 只輸出匹配行的行數 -h 查詢多文件的時候不顯示匹配的文件名字 -l 查詢多文件只顯示匹配的文件名 -s 不顯示錯誤信息 grep與正則表達式同用 grep “^[^abc]” *.f 提取行首不是abc的行 grep “[0-9]{3}[8]” *.f 提取類似xxx8的行,x表示任意數字 grep “a{2}” *.f 顯示a至少出現兩次的行,注意grep是以行處理單位的 grep -n “^” file 列出空行的行號 -E參數,可以使用”與”和”或”模式 grep -E “abc | def” *.f 顯示包含abc或者def的行 ex: ls -l | grep “^$” 顯示目錄 ls -l | grep “^d” 顯示文件 ls -l | grep “^d..x..x..x” 顯示特定權限的目錄 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:按照權限查找文件 find ~ -perm 755 -print 查找權限為755的文件 find ~ -perm 007 -print 查找o位置上具有7權限的文件 find ~ -perm 4000 -print 查找具有suid的文件 3)-prune 不在當前目錄下查找 4)-user和-nouser find ~ -user zhao -print 查找文件屬主是zhao的文件 find ~ -nouser -print 查找文件屬主已經被刪除的文件 5)-group和-nogroup find ~ -group zhao -print 查找文件群組是zhao的文件 6)按照時間 find ~ -mtime -5 -print 文件更改時間在5天內的文件 find ~ -mtime +3 -print 文件更改時間在3天前的文件 find ~ -newer file1 -print 查找比文件file1新的文件 7)按照類型查找 find ~ -type d -print 查找所有目錄 8)按照大小 find ~ -size +1000000C -print 查找文件大小大于1000000字節(1M)的文件 9)查找位于本文件系統里面的文件 find / -name “*.txt” -mount -print -exec,-ok:find命令對于匹配文件執行該參數所給出shell命令,相應命令形式為: ‘command’ {} /; -ok 在執行命令前要確認 find ~ -type f -exec ls -l {} /; find / -name “*.log” -mtime +5 -ok rm {} /; find . -name core -exec rm {} /; 使用-x dev參數 防止find搜索其他分區 find . -size 0 -exec rm {} /; 刪除尺寸為0的文件 2. xargs與-exec功能類似 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 刪除所有以~結尾的文件 ————————————————————————— —————————————————————————
SED:
sed [options] sedcommand inputfile >outputfile sed不接觸初始輸入文件,對其不做修改,若想保存改動,重要將輸出重定向到一個文件即可 a: 當前行后面加入一行或者文本 c: 用信文本替換本行的文本 d: 刪除一行 D: 刪除模板塊的第一行 i: 在當前行上面插入文本 h: 拷貝模板塊的內容到內存緩沖區 H: 追加模板塊的內容到內存緩沖區 g: 獲得內存緩沖區內容,并替換當前模板中的文本 G: 獲得內存緩沖區內容,并追加到當前模版塊文本的后面 n: 讀取下一個輸入行,用下一個命令處理新行而不是第一個命令 N: 追加下一個輸入行到模版塊后面,并在二者間插入一個新行,改變當前行的號碼 p: 打印模板塊的行 P: 打印模板塊的地一行 q: 退出sed r file: 從file中讀行 !: 表示后面的命令對所有沒有選中的行起作用 s/re/strint/: 用string替換正則表達式re =: 打印當前行號
command: 把注釋擴展到下一個換行符號前
l 打印匹配行,包括顯示控制符號 **替換標記 g: 行內全部替換 p: 打印行 w: 把行寫入一個文件 x: 互換模板塊和緩沖區中的文本 y: 把一個字符翻譯成另外一個字符 **sed中元字符可以使用正則表達式中所有的 新加: & 保存搜索字符 s/love/&/ 用love代替love **sed定位文本的方式 x 行號 x-y 從x行到y行 /patern/ 查詢包括patern的行 x,y! 不包括指定x-y行號的行 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 一行的開頭的west用north替換,并打印發生替換的行; sed ‘s/[0-9][0-9]/&.5/’ file 所有以兩個數字結尾的行,最后兩個數字被他們自己替換并附加.5; sed -n ‘s/(Mar)got//1ianne/p’ file 將Margot替換為Marianne,并打印發生替換的行; sed ‘s#abc#ABC#g’ file 所有abc由ABC替換,(所有s后面緊跟的字符都被認為是新的分隔符); 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中的內容附加在包含Sam的行后面; sed ‘/Sam/w file1′ file 將還有Sam行寫入文件file1中; sed ‘/^north /a/new line second line’ file 所有以north加空格開頭的行后面附加上兩行文本,a/表示追加文本,/表示換行(tcsh中需要,bash中不需要); sed ‘/^north/i/new line’ file 在行首為north的行前面插入一個新行; sed ‘/norht/{n; s/aa/bb/;}’ file 首先匹配含有north的行,然后執行一組命令,n表示移到下一行,并用bb代替aa; sed ’1,3g/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/’ file 將1到3行中的所有小寫字母用大寫字母替換; sed ‘/Lewis/{s/Lewis/bbb;q;}’ file 首先找到匹配Lewis的行,然后用bbb代替Lewis,接著q退出seq; sed -e ‘/north/h’ -e ‘G′file首先找到包含norht的行,h拷貝到內存緩沖區,然后到文件隨后一行(),G附加在最后一行后面; sed -e ‘/we/{h;d;}’ -e ‘/ct/{G:}’ file 查找包含we的行,拷貝并且刪除他,然后查找包含ct的行,將拷貝內容附加到他后面; sed -e ‘/north/h’ -e ‘g’ file 首先找到包含norht的行,h拷貝到內存緩沖區,然后到文件隨后一行并覆蓋他; sed -n ‘l’ file 打印所有包含不能打印字符的行。 sed -n ‘/.*ing/p’ file 顯示含有以ing結尾單詞的行; sed -n ‘/music/=’ file 打印含有music的行號; sed ‘^d’ file 刪除空行 sed ‘s/^/abcd/g’ file 在行首填加abcd sed ‘s//abcd/g′file在行尾填加abcdsed‘s/rm/played &/g’ file &表示在替換的時候保留被替換的詞(rm–played rm) sed ‘s/^M//g’ file 去掉行尾的^M (^M的輸入,先按ctrl+v然后按enter即可即可) ————————————————————————— ————————————————————————— gawk程序: awk [-F 域分隔符] ‘commands’ inputfile awk執行時,其域標志符為1,2,3………n,0表示所有的域 awk -v var=value 賦值給一個用戶定義的變量 awk ‘pattern’ file awk ‘{action}’ file awk ‘pattern {action}’ file ex: awk ‘{print $0}’ file 打印所有的域 awk ‘/Mary/’ file 打印包含file中包含Mary的行; awk ‘{print $1}’ file 打印文件的第一列(第一個域); awk ‘/Mary/ {print $1,$2}’ file 打印文件file包含Mary的行的第一和第二個域; df | awk ‘S4>75000′ 打印可用空間大于75000的文件系統 date | awk ‘{print ” month:”, $2, “/n year:” $6}’ 格式化date的輸出; awk ‘BEGIN{OFMT=”%.2f”; print 1.25463}’ 指定數字輸出格式,小數點后面保留兩位有效數(1.25); awk ‘/[ab]cdef/’ file 打印匹配acdef或者bcdef的行; awk ‘{print NR, $0}’ file awk ‘{print $0, NR}’ file NR當前記錄數,每處理一個記錄NR就加1 上面的命令相當于在每一行后面加上一個行號; NF則記錄每一行的域的個數; awk -F ‘[ :/t]‘ ‘{print $0}’ file 指定域分隔符為空格、:或者tab awk ‘/^[A-Z][a-z]+/’ file 打印所有以一個大寫字母開頭,然后是一個或者多個小寫字母的行; awk ‘1~/[Bb]ill/’ file 第一個域匹配Bill或者bill的行; awk ‘1! /ly/’ file 第一個域末尾不是ly的行; awk ‘/^(No|no)/’ file 打印行首為No或者no的行; awk ‘BEGIN {print “file head /n”} {print 1/t4}’ file awk ‘BEGIN {print “file head /n”} {print 1/t4}’ file |tee out.file 打印文件的時候附加一個文件頭 awk ‘BEGIN {print “file head /n”} {print 1/t4} END {print “end of file”}’ file 打印文件的時候附加一個文件頭和文件尾 awk中使用正則表達式 awk ‘{if(1 /hello/)print0}’ file 如果域1中包含hello,就打印所有的域 ~//表示匹配正則表達式,!~//表示不匹配正則表達式 awk ‘{if(6,>=,==,!=, ,! (匹配,不匹配)awk‘3==5346′ file 第三個域等于5346,就打印出該行; awk ‘3>5000print$1′file第三個域大于5000就打印該行第一個域awk‘max=$1>$2?$1:$2;printmax′file如果第一個域大于第二個域,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第一次出現和Jary第一次出現之間的所有行; awk ‘/north/ {print 3+10}’ file 包含north行的地三個域加10; awk ‘3==”aa” {2=”dd”;print0}’ file 將地三個域為aa的行的第二域變成dd,并打印該行; **awk編程: 使用變量 awk ‘1 /Tom/wage=$2+$3;printwage′file先掃描第一個域,如果匹配Tom,就將第二和第三域的總和賦值給變量wage并輸出;awk‘BEGINFS=”:”;OFS=”/t”;ORS=”/n/n”print$0′file處理文件前設置域分隔符(FS)為(:)輸出域分隔(OFS)為(/t)輸出記錄分隔符(ORS)為(/n/n)awk‘ENDprint“Thenumberofrecordis:′NR′file處理完文件后執行END語句輸出總記錄數awk‘/Mary/count++ENDprint“Marywasfound”count“times”′file計數文件中Mary出現的次數;??awk輸入輸出重定向awk‘4>=70 {print 1,2 >”outfile”}’ file 結果重定向到文件outfile中 awk ‘BEGIN{“date” |getline d; print d}’ 將date結果輸給getline函數,并打印 (getline從標準輸出,管道等獲得輸入) awk ‘BEGIN{“date” |getline d; split(d,mon); print mon[1] mon[2]}’ 將date結果輸給getline函數,slpit將d分解成數組,打印數組第2個變量 **split函數:split(string,array,field seperator) awk ‘BEGIN{while(“ls”|getline) print}’ 依次輸出ls的每一項 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 到達文件尾返回0 讀到一行返回1 讀取文件/etc/passwd,計數行數 **awk控制語句 if語句: awk ‘{if(6>50)print1 “too high”}’ file awk ‘{if(6>20 &&250}{x++; print x} else {y++;print y}’ file awk ‘{if(1~/peter/){next} else {print}}’ file 如果第一個域包含peter,awk就忽略這一行,讀取文件的下一行,腳本從頭開始執行; 循環語句: awk ‘{i=1; while(i file cat -v file 顯示文件,包括其中的控制符(-v) cat -n file 為每一行編號 cat -b file 每個非空行編號 cat -T file 以^I顯示tab 3. 管道 | 把一個命令的輸出傳遞給另外一個命令為輸入 ex: ls | grep file.doc 查找文件file.doc who | awk ‘{print1 “/t” 2}’ 只顯示用戶名和所在終端 df -h | awk ‘{print1}’ |grep -v “filesystem” (-v表示輸出不包括filesystem的項目) df -h | awk ‘{print 1}’ |grep -v “filesystem” |sed ‘s///dev////g’ 顯示設備的時候不顯示/dev/ 4.tee who | tee who.txt 輸出到屏幕的同時輸出到文件 who | tee -a who.txt 附加在文件的后面 5.文件重定向 ls -l |grep ^d >file.out 所有目錄名字重定向到一個文件 cat /etc/passwd | awk -F: ‘{print1}’ |sort >a.out (-F:指定分隔符為:) cat >file.out reboot at> ctrl+D 3小時后reboot 3. bc – 計算器 scale=3 設置小數點后數字為數 ibase=2 二進制運算 4. ls -d dir 只顯示目錄而不顯示其下面的文件。 5. sync 更新superblock并把它寫入硬盤 6. scp user@host:/path/file1 user@host:/path/file 服務器間拷貝文件