GREP 是 Global Regular Expression Print 的缩写
对于标准输入的每一行,grep执行以下的操作:
(1) 把下一输入行复制到模式空间中. 模式空间是只可保存一个文本行的缓冲区.
(2) 对模式空间应用正则表达式.
(3) 如果有匹配存在,该行从模式空间中被复制到标准输出.
注意grep处理下列情况的方式:
1.grep是一个搜索程序,它只能搜索匹配一个正则表达式的一行的存在性.
2.grep可以对一行采取唯一的动作是把它发送到标准输出. 如果该行不匹配正则表达式,则其不被打印.
3.行的选择只基于正则表达式. 行编号或其他准则不能用于选择行.
4.grep是一个过滤器. 它可用在管道的左边或右边.
5.grep不能用于增加,删除或修改行.
6.grep不能用于只打印行的一部分.
7.grep不能只读取文件的一部分.
8.grep不能基于前面的内容或下一行来选择一行.只有一个缓冲区,它只保存当前行.
GREP族包括: grep,fgrep,egrep
fgrep:只支持字符串模式,不支持正则表达式.
grep:只支持数量有限的正则表达式.
egrep:支持大多数的正则表达式,但不是全部.
其中egrep就等同于grep -E ,fgrep等同于grep -F
grep常用的选项:
-c 只打印匹配模式的行编号记数
-i 在匹配文本时忽略大小写
-n 在每行前显示其行编号
-v 逆向输出. 打印不匹配模式的行
grep:
一般格式:grep [options] 基本正则表达式 [filename]
注意:基本正则表达式可以为字符串,如果是字符串的时候请加上“”号,否则容易出错
例子:
1、查询多个文件:
2、行匹配
计算本目录下sh文件中包含echo字符的个数
在每行前显示其行号
逆向输出. 打印不匹配模式的行
在匹配文本时忽略大小写
对于标准输入的每一行,grep执行以下的操作:
(1) 把下一输入行复制到模式空间中. 模式空间是只可保存一个文本行的缓冲区.
(2) 对模式空间应用正则表达式.
(3) 如果有匹配存在,该行从模式空间中被复制到标准输出.
注意grep处理下列情况的方式:
1.grep是一个搜索程序,它只能搜索匹配一个正则表达式的一行的存在性.
2.grep可以对一行采取唯一的动作是把它发送到标准输出. 如果该行不匹配正则表达式,则其不被打印.
3.行的选择只基于正则表达式. 行编号或其他准则不能用于选择行.
4.grep是一个过滤器. 它可用在管道的左边或右边.
5.grep不能用于增加,删除或修改行.
6.grep不能用于只打印行的一部分.
7.grep不能只读取文件的一部分.
8.grep不能基于前面的内容或下一行来选择一行.只有一个缓冲区,它只保存当前行.
GREP族包括: grep,fgrep,egrep
fgrep:只支持字符串模式,不支持正则表达式.
grep:只支持数量有限的正则表达式.
egrep:支持大多数的正则表达式,但不是全部.
其中egrep就等同于grep -E ,fgrep等同于grep -F
grep常用的选项:
-c 只打印匹配模式的行编号记数
-i 在匹配文本时忽略大小写
-n 在每行前显示其行编号
-v 逆向输出. 打印不匹配模式的行
grep:
一般格式:grep [options] 基本正则表达式 [filename]
注意:基本正则表达式可以为字符串,如果是字符串的时候请加上“”号,否则容易出错
例子:
1.sh
#!/bin/bash
echo $0 | awk -F/ '{print $NF}'
echo $1 | awk -F/ '{print $NF}'
cp 1.sh 2.sh
1、查询多个文件:
[root@localhost ~]# grep 'echo' *.sh
1.sh:echo $0 | awk -F/ '{print $NF}'
1.sh:echo $1 | awk -F/ '{print $NF}'
2.sh:echo $0 | awk -F/ '{print $NF}'
2.sh:echo $1 | awk -F/ '{print $NF}'
2、行匹配
计算本目录下sh文件中包含echo字符的个数
[root@localhost ~]# grep -c "echo" *.sh
1.sh:2
2.sh:2
在每行前显示其行号
[root@localhost ~]# grep -n "echo" *.sh
1.sh:2:echo $0 | awk -F/ '{print $NF}'
1.sh:3:echo $1 | awk -F/ '{print $NF}'
2.sh:2:echo $0 | awk -F/ '{print $NF}'
2.sh:3:echo $1 | awk -F/ '{print $NF}'
逆向输出. 打印不匹配模式的行
[root@localhost ~]# grep -v "echo" *.sh
1.sh:#!/bin/bash
2.sh:#!/bin/bash
在匹配文本时忽略大小写
[root@localhost ~]# grep -i "ECHO" *.sh
1.sh:echo $0 | awk -F/ '{print $NF}'
1.sh:echo $1 | awk -F/ '{print $NF}'
2.sh:echo $0 | awk -F/ '{print $NF}'
2.sh:echo $1 | awk -F/ '{print $NF}'