1. 程式人生 > >linux下使用find xargs grep查詢檔案及檔案內容

linux下使用find xargs grep查詢檔案及檔案內容

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) \ 轉義字元
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 

[email protected]:/path/file1 [email protected]:/path/file
伺服器間拷貝檔案

相關推薦

linux使用find xargs grep查詢檔案檔案內容

1,在某個路徑下查檔案。 在/etc下查詢“*.log”的檔案 find /etc -name “*.log” 2,擴充套件,列出某個路徑下所有檔案,包括子目錄。 find /etc -name “*” 3,在某個路徑下查詢所有包含“hello abcserve

linux find---xargs以及find--- -exec結合使用

每次 取消 這樣的 iso hostname options tex input dir 例:刪除/home/raven下,包括子目錄裏所有名為abc.txt的文件: find /home/raven -name abc.txt | xargs rm -rf 如果不使用xa

Linux find檔案查詢)命令的用法總結

[轉自:http://blog.chinaunix.net/uid-24648486-id-2998767] Linux下查詢檔案的命令有兩個:locate 和 find 首先說下locate,locate這個命令是對其生成的資料庫進行遍歷(生成資料庫的命令:update

Linuxfind命令在根目錄查詢不到檔案

  你遇到過linux下root使用者執行find命令按檔名在根目錄下查詢不到指定檔案的情況嗎?如果你遇到這種情況,你分析可能有哪幾種原因導致?這裡記錄一下這個有意思的問題,包括問題場景和解決方法。 問題現象   實現一個工具,需要在root命令下執行普通使用者user1下的stop_

Linuxfind檔案查詢)命令使用例項總結

path:要查詢的目錄路徑。        ~ 表示$HOME目錄        . 表示當前目錄        / 表示根目錄 print:表示將結果輸出到標準輸出。 exec:對匹配的檔案執行該引數所給出的shell命令。        形式為command {} \;,注意{}與\;之間有空格 ok:與

Linuxfind(檔案查詢)命令的總結

*Linux中的查詢命令:        每一種作業系統都有成千上萬的檔案組成,對於linux這樣“一切皆檔案”的作業系統來說更不例外,大家應該都能很輕鬆使用windows下的檔案查詢功能,但是對li

linuxfind檔案查詢)命令的用法總結

?表示通配任意的單個字元 [ ] 表示通配括號裡面的任意一個字元      (2),根據檔案所屬使用者和組來查詢檔案            #  -user//根據屬主來查詢檔案            #  -group        //根據屬組來查詢檔案 (3),根據uid 和 gid來查

Linuxfind命令---檔案查詢和比較

find命令的引數; pathn:   find命令所查詢的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄。 -print: find命令將匹配的檔案輸出到標準輸出。 -exec: find命令對匹配的檔案執行該引數所給出的shell命令。相應命令的形式為'command' { } \;,注意{ }

linuxfind查找文件後使用xargs和exec進行刪除、壓縮處理。

find exec xargsmtime 文件內容上次修改時間   atime 文件被讀取或訪問的時間   ctime 文件狀態變化時間   mtime 和 atime 的含義都是很容易理解的,而 ctime 則需要更多的解釋。由於 inode 維護著每個文件上的元數據,因此,如果與文件有關的元數據發生變化,

linux程式設計中用到的標頭檔案頭的一些定義函式進行解譯(本人使用過程中用到過的不明白的定義函式)

1、typedef unsigned long int pthread_t; 型別定義: typedef unsigned long int pthread_t; //come from /usr/include/bits/pthreadtypes.h 用途:pthread_t用於宣

Linuxfind查詢命令使用

在Linux作業系統中,find命令非常強大,在檔案與目錄的查詢方面可謂無所不至其極,如果能結合xargs命令使得,更是強大無比。 以下來看看find命令忽略目錄查詢的用法吧。 例1,根據檔案屬性查詢: find . -type f -name "*config*"

linux 利用ls grep 和正則表示式實現目錄和檔案的分開顯示

要列出當前目錄下所有的檔名和目錄名直接使用ls命令即可。但如何只列出檔名而不列出目錄呢?查遍了ls 的幫助,也沒看到有這個現成的選項。幸好這個問題還是比較常見的,網上已經有了一些解答,但實驗之後,我發現看到的幾個連結給出的解決方法都是不完全正確的。具體如下。一、網上流傳的解

Linux檔案檔案字尾名

1、Linux檔案的副檔名; 一談到檔案型別,大家就能想到Windows的檔案型別,比如file.txt、file.doc、file.sys、file.mp3、file.exe等,根據檔案的字尾就能判斷檔案的型別。但在Linux一個檔案是否能被執行,和字尾名沒有太大的關係,主要看檔案的屬性有關。但我們瞭解一

linux常用小技巧--查詢目錄是否存在特定內容檔案

使用find命令查詢某個目錄下所有檔案(包括子目錄)中是否包含指定內容 find . -type f|xargs grep -e "需要包含的字元" 這樣就能查詢該目錄下所有包含該字元的檔案內容了,同時也會顯示出該內容所在檔案的位置和檔名。

Linux正則表示式的使用grep工具

正則表示式 規定一些特殊語法表示字元類、數量限定符和位置關係,然後用這些特殊語法和普通字元一起表示一個模式。 字元類 例如: 匹配電話號碼的正則表示式:1[3578][0-9]{9}。 表示第一位是1,第二位是3、5、7、8中的一個,後面9位都

Linuxfind、awk、sed、grep命令的例子

開發十年,就只剩下這套架構體系了! >>>   

Linux使用fstatfs/statfs查詢系統相關信息

命令 fault 成功 ongl fopen pro 運行 als const Linux下使用fstatfs/statfs查詢系統相關信息 1. 功能 #include < sys/statfs.h > int statfs(const char *

Linuxfind命令的使用

find為什麽要使用find命令? Linux系統中有著成千上萬的文件,如果你想要找到自己想要的文件,一款查找軟件是必不可少的,而locate是根據其生成的數據庫進行查找,雖然速度會略快,但非實時查找,有些新的文件或目錄是匹配不到的,而且locate是模糊匹配,而find命令為實時查找,且為精確匹配,如

Linux查看文件編碼修改編碼

tar enca strong lin help 添加 解決 讀取 列表 查看文件編碼在Linux中查看文件編碼可以通過以下幾種方式:1.在Vim中可以直接查看文件編碼:set fileencoding即可顯示文件編碼格式。如果你只是想查看其它編碼格式的文件或者想解決用Vi

Linux使用Corosync+Pacemaker詳解安裝

corosync pacemaker 珠聯璧合 Corosync詳解OpenAIS概述OpenAIS是基於SA Forum 標準的集群框架的應用程序接口規範。OpenAIS提供一種集群模式,這個模式包括集群框架,集群成員管理,通信方式,集群監測等,能夠為集群軟件或工具提供滿足 AIS標準的集