1,在某個路徑下查文件。c++
在/etc下查找「*.log」的文件正則表達式
find /etc -name 「*.log」shell
2,擴展,列出某個路徑下全部文件,包括子目錄。express
find /etc -name 「*」編程
3,在某個路徑下查找全部包含「hello abcserver」字符串的文件。c#
find /etc -name 「*」 | xargs grep 「hello abcserver」數組
或者find /etc -name 「*」 | xargs grep 「hello abcserver」 > ./cqtest.txtbash
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) \ 轉義字符
8) \ 界定單詞的開頭和結尾
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
在行尾填加abcd
sed ‘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 \t $4}’ file
awk ‘BEGIN {print 「file head \n」} {print $1 \t $4}’ file |tee out.file
打印文件的時候附加一個文件頭
awk ‘BEGIN {print 「file head \n」} {print $1 \t $4} END {print 「end of file」}’ file
打印文件的時候附加一個文件頭和文件尾
awk中使用正則表達式
awk ‘{if($1~/hello/) print $0}’ file
若是域1中包含hello,就打印全部的域
~//表示匹配正則表達式,!~//表示不匹配正則表達式
awk ‘{if($6,>=,==,!=,~,!~(匹配,不匹配)
awk ‘$3==5346′ file
第三個域等於5346,就打印出該行;
awk ‘$3>5000 {print $1}’ file
第三個域大於5000就打印該行第一個域
awk ‘{max={$1>$2}?$1:$2; print max}’ 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」; print $0}’ file
將地三個域爲aa的行的第二域變成dd,並打印該行;
**awk編程:
使用變量
awk ‘$1~/Tom/ {wage=$2+$3; print wage}’ file
先掃描第一個域,若是匹配Tom,就將第二和第三域的總和賦值給變量wage並輸出;
awk ‘BEGIN{FS=」:」; OFS=」\t」;ORS=」\n\n」}{print $0}’ file
處理文件前設置
域分隔符(FS)爲(:)
輸出域分隔(OFS)爲(\t)
輸出記錄分隔符(ORS)爲(\n\n)
awk ‘END{print 「The number of record is:’ NR}’ file
處理完文件後執行END語句
輸出總記錄數
awk ‘/Mary/{count++} END{print 「Mary was found」 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) 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
若是第一個域包含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 ‘{print $1 「\t」 $2}’ 只顯示用戶名和所在終端
df -h | awk ‘{print $1}’ |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: ‘{print $1}’ |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
服務器間拷貝文件函數