grep命令详解

来源:互联网 发布:天穹网络 编辑:程序博客网 时间:2024/05/29 09:25

grep 搜索文本的匹配内容,逐行搜索所指定的文件或标准输入,并显示匹配模式的每一行。
 
常用的grep选项有:
 -c 只输出匹配行的计数。
 -i 不区分大小写(只适用于单字符)。
 -h 查询多文件时不显示文件名。
 -l 查询多文件时只输出包含匹配字符的文件名。
 -n 显示匹配行及行号。
 -s 不显示不存在或无匹配文本的错误信息。
 -v 显示不包含匹配文本的所有行。
 
 输入字符串参数时,用双引号括起来,如 "who am i"
 调用变量时,用双引号,如 grep "$MYVAR"
 匹配模式,用单引号,
 
例子:
 grep "good" *.doc  在所有.doc文件中查找字符串"good"
 grep -c "48" data.f  显示文件data.f中包含”48“的行数,不要-c ,显示包含48的行
 grep -n "48" data.f  显示满足匹配模式的所有行,并在第一列显示行号,-v 显示不包含匹配模式
 grep "48\>" data.f 精确匹配48所在行,  \>
 grep '48[34]' data.f 抽取以3或4结尾的代码
 grep '^48' data.f  匹配首行是48
 grep '^[^48]' data.f 匹配首行不是48
 grep '[A-Z][A-Z]..C' data.f  显示 头两个是大写字母,中间任意两个数,并以C结尾的行
 grep '5..199[6,8]' data.f  显示以5开头后跟任意两位,以1996或1998结尾的行
 grep '[0-9]\{3\}8' data.f 显示以任意3个数字和8组成的字符所在行
 grep '[0-9][0-5][0-6][5-8]' data.f   范围组合
 grep '^[0-9][0-5]' data.f   开头^
 grep '[0-9][0-5]$' data.f 结尾$
 grep '4\{2,\}' data.f   数字4至少重复2次,匹配特殊字符,转义字符\
 grep -E '48|47' data.f  -E扩展模式匹配
 grep '[0-9]\{3\}\.[0-9]\{3\}\.  ip
 grep -i .sh$  忽略大小写,找出以.sh结尾的所有文件
 grep "good" /etc/passwd > /tmp/passwd.out  将匹配的查询结果重定向到一个文件中
 
 /dev/null 2>$1 无底洞,系统垃圾堆,用于除去不需要的输出的信息
 
 grep '48/>' data.f > /dev/null 2>&1

2>&1 就是将 stderr 并进 stdout 作输出
1>&2 或 >&2 就是将 stdout 并进 stderr 作输出  

问: mkdir $DIR > /dev/null 2>&1,  >/dev/null 2>&1就相当于让执行命令后的结果导入到系统垃圾堆。2>&1 代表着什么?在有些句子后添加”>&2” 又是什么意思?

答:0标准输入、1标准输出、2标准出错。&1代表标准输出定向到的地方,加上2>&1则不会打印出错信息。 

>/dev/null 2>&1 表示将所得信息输出到系统垃圾池且不打印出错信息

&2 1>&2把结果重定向到标准出错所在文件, ls>a1 >&2等同 ls >a1 2>&1即把标准输出和标准出错到重定向到a1,终端上看不到任何信息