1. 程式人生 > >linux grep命令(查詢檔案裡符合條件的字串)

linux grep命令(查詢檔案裡符合條件的字串)


b124230
b034325
b103303
b044525
# more size.txt | grep '[bB]'
b124230
b034325
b103303
b044525
B081016
B103303
BADc2345

# grep 'root' /etc/group
root::0:root
bin::2:root,bin,daemon
sys::3:root,bin,sys,adm
adm::4:root,adm,daemon
uucp::5:root,uucp
mail::6:root
tty::7:root,tty,adm
lp::8:root,lp,adm
nuucp::9:root,nuucp
daemon::12:root,daemon

# grep '^root' /etc/group 匹配正則表示式的開始行
root::0:root

# grep 'uucp' /etc/group
uucp::5:root,uucp
nuucp::9:root,nuucp

# grep '\<uucp' /etc/group
uucp::5:root,uucp

# grep 'root$' /etc/group 匹配正則表示式的結束行
root::0:root
mail::6:root

# more size.txt | grep -i 'b1..*3' -i :忽略大小寫

b124230
b103303
B103303

# more size.txt | grep -iv 'b1..*3' -v :查詢不包含匹配項的行

b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
a013386
b044525
m8987131
B081016
M45678
BADc2345

# more size.txt | grep -in 'b1..*3'
1:b124230
9:b103303
15:B103303

# grep '$' /etc/init.d/nfs.server | wc -l
128
# grep '\$' /etc/init.d/nfs.server | wc –l 忽略正則表示式中特殊字元的原有含義

15
# grep '\$' /etc/init.d/nfs.server
case "$1" in
>/tmp/sharetab.$$
[ "x$fstype" != xnfs ] &&
echo "$path\t$res\t$fstype\t$opts\t$desc"
>>/tmp/sharetab.$$
/usr/bin/touch -r /etc/dfs/sharetab /tmp/sharetab.$$
/usr/bin/mv -f /tmp/sharetab.$$ /etc/dfs/sharetab
if [ -f /etc/dfs/dfstab ] && /usr/bin/egrep -v '^[ ]*(#|$)'
if [ $startnfsd -eq 0 -a -f /etc/rmmount
.conf ] &&
if [ $startnfsd -ne 0 ]; then
elif [ ! -n "$_INIT_RUN_LEVEL" ]; then
while [ $wtime -gt 0 ]; do
wtime=`expr $wtime - 1`
if [ $wtime -eq 0 ]; then
echo "Usage: $0 { start | stop }"

# more size.txt

the test file
their are files
The end

# grep 'the' size.txt
the test file
their are files

# grep '\<the' size.txt
the test file
their are files

# grep 'the\>' size.txt
the test file

# grep '\<the\>' size.txt
the test file

# grep '\<[Tt]he\>' size.txt
the test file

==================================================================

1,簡介
使用正則表示式的一個多用途文字搜尋工具.這個php
?name=����" onclick="tagshow(event)" class="t_tag">命令本來是ed行編輯器中的一個php?name=����" onclick="tagshow(event)" class="t_tag">命令/過濾器:
        g/re/p -- global - regular expression - print.
基本格式
grep pattern [file...]
(1)grep 搜尋字串 [filename]
(2)grep 正則表示式 [filename]
在檔案中搜索所有 pattern 出現的位置, pattern 既可以是要搜尋的字串,也可以是一個正則表示式.
注意:在輸入要搜尋的字串時最好使用雙引號/而在模式
匹配使用正則表示式時,注意使用單引號

2,grep的選項
    -c 只輸出匹配行的計數
    -i 不區分大小寫(用於單字元)
    -n 顯示匹配的行號
    -v 不顯示不包含匹配文字的所以有行
    -s 不顯示錯誤資訊
    -E 使用擴充套件正則表示式
    更多的選項請檢視:man grep

3,常用grep例項

(1)多個檔案查詢
    grep "sort" *.doc       #見檔名的匹配

(2)行匹配:輸出匹配行的計數
    grep -c "48" data.doc   #輸出文件中含有48字元的行數

(3)顯示匹配行和行數
    grep -n "48" data.doc       #顯示所有匹配48的行和行號

(4)顯示非匹配的行
    grep -vn "48" data.doc      #輸出所有不包含48的行

(4)顯示非匹配的行
    grep -vn "48" data.doc      #輸出所有不包含48的行

(5)大小寫敏感
    grep -i "ab" data.doc       #輸出所有含有ab或Ab的字串的行

4, 正則表示式的應用

(1)正則表示式的應用 (注意:最好把正則表示式用單引號括起來)
    grep '[239].' data.doc      #輸出所有含有以2,3或9開頭的,並且是兩個數字的行

(2)不匹配測試
    grep '^[^48]' data.doc      #不匹配行首是48的行

(3)使用擴充套件模式匹配
    grep -E '219|216' data.doc

(4) ...
    這需要在實踐中不斷應用和總結,熟練掌握正則表示式。

5, 使用類名
可以使用國際模式匹配的類名:
[[:upper:]]   [A-Z]
[[:lower:]]   [a-z]
[[:digit:]]   [0-9]
[[:alnum:]]   [0-9a-zA-Z]
[[:space:]]   空格或tab
[[:alpha:]]   [a-zA-Z]

(1)使用
    grep '5[[:upper:]][[:upper:]]' data.doc     #查詢以5開頭以兩個大寫字母結尾的行