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 ,终端上看不到任何信息