簡單的Shell 編程

grep命令

grep:global/regular expressions/print的縮寫
grep能夠在一個或多個文件內容中搜索某一特定 字符模式、也被稱爲正則表達式
一個模式可以是一個單一的字符、一個字符串、一個單詞或一個句子
一個正則表達式是描述一組字符串的一個模式
正則表達式的構成是模仿了數學表達式,通過使用操作符將較小的表達式組合成一個新的表達式
一個正則表達式既可以是一些純文本文字,也可以是用來產生模式的一些特殊字符

正則表達式的通配符

grep支持以下正則表達式的元字(通配)符:
c*:將匹配0個(即空白)或多個字符c
.:將匹配任何一個字符而且只能是一個字符
[xyz]:將匹配方括號中的任意一個字符
[^xyz]:將匹配不包括方括號中的字符的所有字符
^:鎖定行的開頭
$:鎖定行的結尾
元字符*、+、{、|、(和 ) 失去了原義,如要恢復其原義要在之前冠以反斜線\ —— 即*、+、{、|、(、和)

grep命令的語法格式

grep 選項 模式 文件名
grep命令中常用選項如下:
-c:僅列出包含模式的行數
-i:忽略模式中的字母大小寫
-l:列出帶有匹配行的文件名
-n:在每行的最前面列出行號
-v:列出沒有匹配模式的行
-w:把表達式作爲一個完整的單字來搜尋
除了-w選項之外,其他的每個選項都可以在egrep和fgrep命令中使用

grep命令的例題

[root@dog dag]# cd backup

[root@dog backup]# grep CLERK emp.data
7369    SMITH    CLERK    800    17-DEC-80
7876    ADAMS    CLERK    1100    23-MAY-87
7900    JAMES    CLERK    950    03-DEC-81
7934    MILLER    CLERK    1300    23-JAN-82
[root@dog backup]# grep -c CLERK emp.data
4
[root@dog backup]# grep Clerk emp.data

[root@dog backup]# grep -i Clerk emp.data
7369    SMITH    CLERK    800    17-DEC-80
7876    ADAMS    CLERK    1100    23-MAY-87
7900    JAMES    CLERK    950    03-DEC-81
7934    MILLER    CLERK    1300    23-JAN-82

[root@dog backup]# grep -i clerk emp.data
7369    SMITH    CLERK    800    17-DEC-80
7876    ADAMS    CLERK    1100    23-MAY-87
7900    JAMES    CLERK    950    03-DEC-81
7934    MILLER    CLERK    1300    23-JAN-82

[root@dog backup]# grep -in Clerk emp.data
1:7369    SMITH    CLERK    800    17-DEC-80
11:7876    ADAMS    CLERK    1100    23-MAY-87
12:7900    JAMES    CLERK    950    03-DEC-81
14:7934    MILLER    CLERK    1300    23-JAN-82

[root@dog backup]# cat -n emp.data
     1    7369    SMITH    CLERK    800    17-DEC-80
     2    7499    ALLEN    SALESMAN    1600    20-FEB-81
     3    7521    WARD    SALESMAN    1250    22-FEB-81
     4    7566    JONES    MANAGER    2975    02-APR-81
     5    7654    MARTIN    SALESMAN    1250    28-SEP-81
     6    7698    BLAKE    MANAGER    2850    01-MAY-81
     7    7782    CLARK    MANAGER    2450    09-JUN-81
     8    7788    SCOTT    ANALYST    3000    19-APR-87
     9    7839    KING    PRESIDENT    5000    17-NOV-81
    10    7844    TURNER    SALESMAN    1500    08-SEP-81
    11    7876    ADAMS    CLERK    1100    23-MAY-87
    12    7900    JAMES    CLERK    950    03-DEC-81
    13    7902    FORD    ANALYST    3000    03-DEC-81
    14    7934    MILLER    CLERK    1300    23-JAN-82

[root@dog backup]# grep -v CLERK emp.data
7499    ALLEN    SALESMAN    1600    20-FEB-81
7521    WARD    SALESMAN    1250    22-FEB-81
7566    JONES    MANAGER    2975    02-APR-81
7654    MARTIN    SALESMAN    1250    28-SEP-81
7698    BLAKE    MANAGER    2850    01-MAY-81
7782    CLARK    MANAGER    2450    09-JUN-81
7788    SCOTT    ANALYST    3000    19-APR-87
7839    KING    PRESIDENT    5000    17-NOV-81
7844    TURNER    SALESMAN    1500    08-SEP-81
7902    FORD    ANALYST    3000    03-DEC-81

[root@dog backup]# grep ^78 CLERK emp.data
grep: CLERK: 沒有那個文件或目錄
emp.data:7839    KING    PRESIDENT    5000    17-NOV-81
emp.data:7844    TURNER    SALESMAN    1500    08-SEP-81
emp.data:7876    ADAMS    CLERK    1100    23-MAY-87

[root@dog backup]# grep 87$ emp.data

[root@dog backup]# grep 87$ CLERK emp.data
grep: CLERK: 沒有那個文件或目錄

[root@dog backup]# exit
logout

[dag@dog ~]$ cd backup

[dag@dog backup]$ grep ^78 emp.data
7839    KING    PRESIDENT    5000    17-NOV-81
7844    TURNER    SALESMAN    1500    08-SEP-81
7876    ADAMS    CLERK    1100    23-MAY-87

[dag@dog backup]$ grep 87$ emp.data

[dag@dog backup]$ grep 81$ emp.data

[dag@dog backup]$ grep $87 emp.data
7369    SMITH    CLERK    800    17-DEC-80
7499    ALLEN    SALESMAN    1600    20-FEB-81
7521    WARD    SALESMAN    1250    22-FEB-81
7566    JONES    MANAGER    2975    02-APR-81
7654    MARTIN    SALESMAN    1250    28-SEP-81
7698    BLAKE    MANAGER    2850    01-MAY-81
7782    CLARK    MANAGER    2450    09-JUN-81
7788    SCOTT    ANALYST    3000    19-APR-87
7839    KING    PRESIDENT    5000    17-NOV-81
7844    TURNER    SALESMAN    1500    08-SEP-81
7876    ADAMS    CLERK    1100    23-MAY-87
7900    JAMES    CLERK    950    03-DEC-81
7902    FORD    ANALYST    3000    03-DEC-81
7934    MILLER    CLERK    1300    23-JAN-82

[dag@dog backup]$ grep 87$  emp.data

[dag@dog backup]$ grep -i Man emp.data
7499    ALLEN    SALESMAN    1600    20-FEB-81
7521    WARD    SALESMAN    1250    22-FEB-81
7566    JONES    MANAGER    2975    02-APR-81
7654    MARTIN    SALESMAN    1250    28-SEP-81
7698    BLAKE    MANAGER    2850    01-MAY-81
7782    CLARK    MANAGER    2450    09-JUN-81
7844    TURNER    SALESMAN    1500    08-SEP-81

[dag@dog backup]$ grep -c Man emp.data
0

[dag@dog backup]$ grep -i MAN emp.data
7499    ALLEN    SALESMAN    1600    20-FEB-81
7521    WARD    SALESMAN    1250    22-FEB-81
7566    JONES    MANAGER    2975    02-APR-81
7654    MARTIN    SALESMAN    1250    28-SEP-81
7698    BLAKE    MANAGER    2850    01-MAY-81
7782    CLARK    MANAGER    2450    09-JUN-81
7844    TURNER    SALESMAN    1500    08-SEP-81

[dag@dog backup]$ grep -c MAN emp.data
7

[dag@dog backup]$ grep -i Clerk emp.data | sort -k4
7876    ADAMS    CLERK    1100    23-MAY-87
7934    MILLER    CLERK    1300    23-JAN-82
7369    SMITH    CLERK    800    17-DEC-80
7900    JAMES    CLERK    950    03-DEC-81

[dag@dog backup]$ grep -i Clerk emp.data | sort -n  -k4
7369    SMITH    CLERK    800    17-DEC-80
7900    JAMES    CLERK    950    03-DEC-81
7876    ADAMS    CLERK    1100    23-MAY-87
7934    MILLER    CLERK    1300    23-JAN-82

[dag@dog backup]$ grep '1..0' emp.data
7499    ALLEN    SALESMAN    1600    20-FEB-81
7521    WARD    SALESMAN    1250    22-FEB-81
7654    MARTIN    SALESMAN    1250    28-SEP-81
7844    TURNER    SALESMAN    1500    08-SEP-81
7876    ADAMS    CLERK    1100    23-MAY-87
7934    MILLER    CLERK    1300    23-JAN-82
[dag@dog backup]$ grep '[12]..0' emp.data
7499    ALLEN    SALESMAN    1600    20-FEB-81
7521    WARD    SALESMAN    1250    22-FEB-81
7654    MARTIN    SALESMAN    1250    28-SEP-81
7698    BLAKE    MANAGER    2850    01-MAY-81
7782    CLARK    MANAGER    2450    09-JUN-81
7844    TURNER    SALESMAN    1500    08-SEP-81
7876    ADAMS    CLERK    1100    23-MAY-87
7934    MILLER    CLERK    1300    23-JAN-82

[dag@dog backup]$ grep '[12]..[05]' emp.data
7499    ALLEN    SALESMAN    1600    20-FEB-81
7521    WARD    SALESMAN    1250    22-FEB-81
7566    JONES    MANAGER    2975    02-APR-81
7654    MARTIN    SALESMAN    1250    28-SEP-81
7698    BLAKE    MANAGER    2850    01-MAY-81
7782    CLARK    MANAGER    2450    09-JUN-81
7844    TURNER    SALESMAN    1500    08-SEP-81
7876    ADAMS    CLERK    1100    23-MAY-87
7934    MILLER    CLERK    1300    23-JAN-82

[dag@dog backup]$ grep -v '[12]..[05]' emp.data
7369    SMITH    CLERK    800    17-DEC-80
7788    SCOTT    ANALYST    3000    19-APR-87
7839    KING    PRESIDENT    5000    17-NOV-81
7900    JAMES    CLERK    950    03-DEC-81
7902    FORD    ANALYST    3000    03-DEC-81

[dag@dog backup]$ grep '[89].0' emp.data
7369    SMITH    CLERK    800    17-DEC-80
7698    BLAKE    MANAGER    2850    01-MAY-81
7900    JAMES    CLERK    950    03-DEC-81

[dag@dog backup]$ grep -w '[89].0' emp.data
7369    SMITH    CLERK    800    17-DEC-80
7900    JAMES    CLERK    950    03-DEC-81

[dag@dog backup]$ grep -w MAN emp.data

[dag@dog backup]$ cd /etc

[dag@dog etc]$ grep -l root group passwd hosts
group
passwd

[dag@dog etc]$ ls -l group passwd hosts
-rw-r--r--. 1 root root  885 5月  18 01:19 group
-rw-r--r--. 1 root root  158 1月  12 2010 hosts
-rw-r--r--. 1 root root 1813 5月  17 23:12 passwd

[dag@dog etc]$ hear -2 group
bash: hear: command not found

[dag@dog etc]$ head -2 group
root:x:0:
bin:x:1:bin,daemon

[dag@dog etc]$ head -2 passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

[dag@dog etc]$ cat hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

[dag@dog etc]$ grep '5*' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
saslauth:x:498:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
dag:x:500:500:dad dog:/home/dag:/bin/bash
cat:x:501:501::/home/cat:/bin/bash
fox:x:502:502::/home/fox:/bin/bash
pig:x:503:503::/home/pig:/bin/bash

[dag@dog etc]$ grep '55*' passwd
sync:x:5:0:sync:/sbin:/bin/sync
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
dag:x:500:500:dad dog:/home/dag:/bin/bash
cat:x:501:501::/home/cat:/bin/bash
fox:x:502:502::/home/fox:/bin/bash
pig:x:503:503::/home/pig:/bin/bash

[dag@dog etc]$ grep -w '50.' passwd
dag:x:500:500:dad dog:/home/dag:/bin/bash
cat:x:501:501::/home/cat:/bin/bash
fox:x:502:502::/home/fox:/bin/bash
pig:x:503:503::/home/pig:/bin/bash

[dag@dog etc]$ grep '/bash$' passwd
root:x:0:0:root:/root:/bin/bash
dag:x:500:500:dad dog:/home/dag:/bin/bash
cat:x:501:501::/home/cat:/bin/bash
fox:x:502:502::/home/fox:/bin/bash
pig:x:503:503::/home/pig:/bin/bash

[dag@dog etc]$ ps -e | grep ftp
7968 ?        00:00:00 sftp-server
9277 ?        00:00:00 sftp-server

[dag@dog etc]$ ps -e | grep ora
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章