全部博文(37)
分类: LINUX
2011-12-20 14:16:03
准备文件:
$ cat data 48 Dec 3BC1997 LPSX 68.00 LVX2A 138 483 Step 3BC1997 LPSX 65.00 LVX2A 182 47 Oct 3BC1997 LPSX 43.00 LVX2A 512 219 dec 3BC1997 LPSX 23.00 LVX2A 68 484 nov 3BC1997 LPSX 49.00 LVX2A 234 483 may 3BC1997 LPSX 37.00 LVX2A 644 216 sept 3BC1997 LPSX 86.00 LVX2A 234 |
1.
1.1. grep
一般格式:
grep [选项] 基本正则表达式 [文件]
选项: -c 只输出匹配行的计数。 -i 不区分大小写(只适用于单字符)。 -h 查询多文件时不显示文件名。 -l 查询多文件时只输出包含匹配字符的文件名。 -n 显示匹配行及行号。 -s 不显示不存在或无匹配文本的错误信息。 -v 显示不包含匹配文本的所有行。 |
这里基本正则表达式可为字符串。
输入字符串参数时,最好将其用双引号括起来,可以用来查找多个单词组成的字符串。
在调用变量时,也应该使用双引号,如果不这样,将没有返回结果。
在调用模式匹配时,应使用单引号。
查询多个文件:
$ grep "sort" *.doc 在当前目录下所有.doc文件中查找字符串sort $ grep "sort it" * 在所有文件中查询单词sort it |
xxxxx。
行匹配:
grep -c "483" data 2 grep "483" data 483 Step 3BC1997 LPSX 65.00 LVX2A 182 483 may 3BC1997 LPSX 37.00 LVX2A 644 |
行数:
grep -n "483" data 2:483 Step 3BC1997 LPSX 65.00 LVX2A 182 6:483 may 3BC1997 LPSX 37.00 LVX2A 644 |
显示非匹配行:
grep -v "483" data 48 Dec 3BC1997 LPSX 68.00 LVX2A 138 47 Oct 3BC1997 LPSX 43.00 LVX2A 512 219 dec 3BC1997 LPSX 23.00 LVX2A 68 484 nov 3BC1997 LPSX 49.00 LVX2A 234 216 sept 3BC1997 LPSX 86.00 LVX2A 234 |
精确匹配:
grep '48\>' data 48 Dec 3BC1997 LPSX 68.00 LVX2A 138 |
\>能匹配tab和空格。
不知道为什么grep '48
大小写敏感:
grep -i "step" data 483 Step 3BC1997 LPSX 65.00 LVX2A 182 216 step 3BC1997 LPSX 86.00 LVX2A 234 grep "step" data 216 step 3BC1997 LPSX 86.00 LVX2A 234 wuzhiguo@wuzhiguo-linux:~/program/shell$ |
1.2. grep和正则表达式
使用正则表达式时最好用单引号括起来,这样可以防止与一些shell命令的特殊方式相混淆。
模式范围:
grep '48[34]' data 483 Step 3BC1997 LPSX 65.00 LVX2A 182 484 nov 3BC1997 LPSX 49.00 LVX2A 234 483 may 3BC1997 LPSX 37.00 LVX2A 644 |
不匹配行首:
grep '^[^48]' data 219 dec 3BC1997 LPSX 23.00 LVX2A 68 216 step 3BC1997 LPSX 86.00 LVX2A 234 |
设置大小写:
grep '[Ss]tep' data 483 Step 3BC1997 LPSX 65.00 LVX2A 182 216 step 3BC1997 LPSX 86.00 LVX2A 234 grep '[Ss]tep' data | grep "483" 483 Step 3BC1997 LPSX 65.00 LVX2A 182 |
匹配任意字符:
grep 's..p' data 216 step 3BC1997 LPSX 86.00 LVX2A 234 grep '[A-Za-z][a-z]ep' data 483 Step 3BC1997 LPSX 65.00 LVX2A 182 216 step 3BC1997 LPSX 86.00 LVX2A 234 |
日期查询:
grep '3..199[8,9]' data 483 Step 3BC1998 LPSX 65.00 LVX2A 182 47 Oct 3BC1999 LPSX 43.00 LVX2A 512 grep '[0-9]\{3\}[8,9]' data 483 Step 3BC1998 LPSX 65.00 LVX2A 182 47 Oct 3BC1999 LPSX 43.00 LVX2A 512 |
范围组合:
grep '^[4-9][8-9][1-3]' data 483 Step 3BC1998 LPSX 65.00 LVX2A 182 483 may 3BC1997 LPSX 37.00 LVX2A 644 |
模式出现机率:
grep '9\{3,4\}' data 47 Oct 3BC1999 LPSX 43.00 LVX2A 512 219 dec 3BC9999 LPSX 23.00 LVX2A 68 grep '9\{3,\}' data 47 Oct 3BC1999 LPSX 43.00 LVX2A 512 219 dec 3BC9999 LPSX 23.00 LVX2A 68 grep '9\{3\}' data 47 Oct 3BC1999 LPSX 43.00 LVX2A 512 219 dec 3BC9999 LPSX 23.00 LVX2A 68 |
使用grep匹配“与”或者“或”模式:
grep命令加- E参数,这一扩展允许使用扩展模式匹配。例如,要抽取城市代码为219或216,方法如下:
grep -E '483|484' data 483 Step 3BC1998 LPSX 65.00 LVX2A 182 484 nov 3BC1997 LPSX 49.00 LVX2A 234 483 may 3BC1997 LPSX 37.00 LVX2A 644 |
空行:
$ grep '^$' data
$ |
匹配特殊字符:
grep '68.00' data 48 Dec 3BC1997 LPSX 68.00 LVX2A 138 483 Step 3BC1998 LPSX 68*00 LVX2A 182 grep '68\.00' data 48 Dec 3BC1997 LPSX 68.00 LVX2A 138 |
查询格式化文件名:
ls -l | grep '[a-z]\{1,3\}\.[A-Z]\{2\}' -rw-rw-r-- 1 wuzhiguo wuzhiguo 0 2011-12-20 13:33 a.AB -rw-rw-r-- 1 wuzhiguo wuzhiguo 0 2011-12-20 13:33 def.DE |
查询IP地址:
grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9a]\{1,3\}' data 192.168.1.2 123.345.678.901 192.168.1.a |
1.3. 系统grep命令
目录:
ls -l | grep '^d' drwxrwxr-x 2 wuzhiguo wuzhiguo 4096 2011-12-20 13:41 dir drwxrwxr-x 2 wuzhiguo wuzhiguo 4096 2011-12-20 13:41 dir2 ls -l | grep '^[^d]' 总用量 16 -rw-rw-r-- 1 wuzhiguo wuzhiguo 0 2011-12-20 13:33 a.AB -rw-rw-r-- 1 wuzhiguo wuzhiguo 0 2011-12-20 13:33 Abc.ab -rw-rw-r-- 1 wuzhiguo wuzhiguo 311 2011-12-20 13:37 data -rw-rw-r-- 1 wuzhiguo wuzhiguo 0 2011-12-20 13:33 def.DE -rw-rw-r-- 1 wuzhiguo wuzhiguo 12 2011-12-19 17:52 file ls -l | grep '^[^d]......rwx' -rw-rw-rwx 1 wuzhiguo wuzhiguo 12 2011-12-19 17:52 file |
passwd文件:
grep 'wuzhiguo' /etc/passwd wuzhiguo:x:1000:1000:wuzhiguo,,,:/home/wuzhiguo:/bin/bash grep 'wuzhiguo' /etc/passwd > wuzhiguo.log cat wuzhiguo.log wuzhiguo:x:1000:1000:wuzhiguo,,,:/home/wuzhiguo:/bin/bash |
使用ps命令:
ps -ef | grep "java" wuzhiguo 4947 2397 0 13:52 pts/0 00:00:00 grep --color=auto java |
对一个字符串使用grep:
$ str="123ABC123" $ echo $str 123ABC123 $str | grep '[0-9]\{3\}[A-Z]\{3\}[0-9]\{3\}' 123ABC123 |