05_grep命令

Grep命令功能:按照行方式处理文本。。。
grep 一般格式为:
grep [选项]基本正则表达式[文件]
Grep参数
-c          只输出匹配行的计数。
-I          不区分大小写(只适用于单字符)。
-h          查询多文件时不显示文件名。
-l          查询多文件时只输出包含匹配字符的文件名。
-n          显示匹配行及行号。
-s          不显示不存在或无匹配文本的错误信息。
-v          显示不包含匹配文本的所有行。
Grep命令原理
GREP 是 Global Regular Expression Print 的缩写
对于标准输入的每一行,grep执行以下的操作:
(1) 把下一输入行复制到模式空间中. 模式空间是只可保存一个文本行的缓冲区.
(2) 对模式空间应用正则表达式.
(3) 如果有匹配存在,该行从模式空间中被复制到标准输出.
grep实用程序对输入的每行重复这三个操作步骤.

注意grep处理下列情况的方式:
1.grep是一个搜索程序,它只能搜索匹配一个正则表达式的一行的存在性.
2.grep可以对一行采取唯一的动作是把它发送到标准输出. 如果该行不匹配正则表达式,则其不被打印.
3.行的选择只基于正则表达式. 行编号或其他准则不能用于选择行.
4.grep是一个过滤器. 它可用在管道的左边或右边.
5.grep不能用于增加,删除或修改行.
6.grep不能用于只打印行的一部分.
7.grep不能只读取文件的一部分.
8.grep不能基于前面的内容或下一行来选择一行.只有一个缓冲区,它只保存当前行.

//-c 只输出匹配行的计数 
grep -c "hostnames" 1.txt       //有1行包含字符串 hostnames
eg
hzmct@U-64:/study/linuxtest/day03$ grep -c "hostnames" 2.txt
3

//-n 显示满足匹配模式的所有行行数
grep -n "hostnames" 2.txt
eg
$ grep -n "hostnames" 2.txt
4:hostnames
6:hostnames
12:hostnames

//显示不匹配的行
grep -v "hostnames" 2.txt

//-i 不区分大小写敏感
grep -i "hostNaMEs" 2.txt

//不匹配行首 如果要抽出记录,使其行首不是48,可以在方括号中使用^记号,表明查询在行首开始
grep -n '^[^48]' 2.txt

查找以k开头,以d结尾且中间只有3个字符
grep 'k...d' 2.txt

//-E 是扩展
grep -E 'k...d|k..d' 2.txt
2.txt文件内容
48
48p
48
hello
ll48o
hello
48f
qq
hostnames

HostNAMES
//^只允许在一行的开始匹配字符或单词
//查找首行以48开始的行
hzmct@U-64:/study/linuxtest/day03$ grep -n '^48' 2.txt
1:48
2:48p
3:48
7:48f
hzmct@U-64:/study/linuxtest/day03$ grep -n '[^48]' 2.txt
2:48p
4:hello
5:ll48o
6:hello
7:48f
8:qq
9:hostnames
11:HostNAMES
hzmct@U-64:/study/linuxtest/day03$ grep -n '^[^48]' 2.txt
4:hello
5:ll48o
6:hello
8:qq
9:hostnames
11:HostNAMES

猜你喜欢

转载自blog.csdn.net/WUZHU2017/article/details/82632768