grep [acivn] [--color=auto] '查找字符串' filename

-a:将binary文件以text文件的方式查找数据

-c:计算找到'查找字符串'的次数

-i:忽略大小写

-v:反向选择

-n:将查找结果列出行号


--color=auto:查找结果中关键字着色


**********grep使用例子**********

(1)列出一个目录下目录的名称:

ll |grep '^d' |awk '{print $9}'


其中awk中$后面是列的位置


(2)列出一个文件,去除空白行:

grep -v '^$' /etc/httpd/conf/httpd.conf


(3)去除注释行

grep -v '^$' /etc/httpd/conf/httpd.conf |grep -v '^#'


(4)忽略大小写并注明行号:

dmesg |grep -in 'network'


(5)查找一个以m开头、并且以m结尾的单词

grep -in 'm[a-z]*m' regular_express.txt


**********正则表达式基础**********

--word  字符串

--char  字符

--list 字符序列


^word 表示以word开头

word$ 表示以word结尾

. 表示一定有一个任意字符

char* 表示有0个或无穷多个重复的char

\ 转义字符

[list] 表示选择一个字符匹配,例如a[bc]a 表示aba & aca

[char1-char2] 表示任意的连续字符,char1到char2之间,例如[a-z]表示任意小写字母

[^list] 表示去除不要的字符,有反向选择的意思,例如[^abc] 表示去除包含abc串的行

char\{n,m\} 表示n到m个char,需要使用转义字符


eg:一个脚本,模拟service httpd status 输出

#!/bin/bash
#The output of commond "service httpd status" or "/etc/init.d/httpd status"

m=$(ps -ef |grep httpd |sed 's/^.*grep.*$//g' |sed '/^$/d')
n=$(ps -ef |grep httpd |sed 's/^.*grep.*$//g' |sed '/^$/d' |grep root |grep /usr/sbin/httpd |awk '{print $2}')
#n=$(ps -ef |grep httpd |grep -v grep |grep root |grep /usr/sbin/httpd |awk '{print $2}')
#n=$(ps -ef |grep httpd |sed '/.*grep.*/d' |grep root |grep /usr/sbin/httpd |awk '{print $2}')
if [ "$m" = "" ];
then
        echo "httpd is stopped"
else
        echo "httpd (pid  "$n") is running..."
fi