大家好,又见面了,我是你们的朋友全栈君。
文章目录
- 一、grep常用命令
-
- 1、语法
- 2、范例
- 二、grep的一些高级参数
-
- 1、语法
- 2、范例
- 三、基础正则表达式练习
-
- 1、与中括号` [] `结合
- 2、与反向选择^结合使用
- 3、与行首 `^` 和行尾 $ 字符结合
- 4、任意一个字符` . `与重复字符` * `
- 5、` {} `限定连续字符范围
一、grep常用命令
grep的功能是分析一行信息,若其中有我们所需要的信息,就将其拿出来。
需要注意的是它以整行为单位进行数据的选取。
1、语法
代码语言:javascript复制grep [-acinv] [--color=auto] '要查找的字符串' filename
参数 | 说明 |
---|---|
-a | 将binary文件以text文件的方式查找数据 |
-c | 计算找到查找字符串的次数 |
-i | 忽略大小写的不同 |
-n | 输出行号 |
-v | 反向选择,显示出没有查找字符串的内容的行 |
–color-auto | 将找到的字符串以特殊颜色显示 |
2、范例
1、先将/etc目录下的man.config文件拷贝至/tmp文件夹下,来作实验:
代码语言:javascript复制cd /tmp
cp /etc/man.config .
2、将此文件中有包含MANPATH的那一行取出来。
代码语言:javascript复制cat manpath.config | grep 'MANPATH'
3、与上例子相反,只要没有包含MANPATH的那一行就取出来。
代码语言:javascript复制cat manpath.config| grep -v 'MANPATH'
二、grep的一些高级参数
1、语法
代码语言:javascript复制grep [-A] [-B] [--color=auto] '查找字符串' filename'
- -A:后面可加数字,为after的意思,除了列出该行以外,后续的n行也列出来。
- -B:后面可加数字,为before的意思,除了列出该行以外,前面的n行也列出。
2、范例
1、用dmesg列出内核信息,然后用grep找出包含eth的那行,并且显示行号。而且将关键字的前2行和后3行也列出来。
代码语言:javascript复制dmesg | grep -n -A3 -B2 --color=auto 'eth'
其中的 |
是管道符,用于把左边输出的内容传递给右边的命令
在关键字的显示上,grep可以用—color=auto
来将关键字用特殊颜色显示。但是每次使用grep都得加上这个信息很麻烦,于是可以用alias进行一下处理就OK了。
可以在~/.bashrc内加上这一行:alias grep=‘grep –color=auto’。
三、基础正则表达式练习
1、与中括号[]
结合
- 查找包含
[]
中某一个字符的内容
比如我要查找man或者men字符串,可以这样来查找:
grep -n 'm[ae]n' manpath.config
查找包含man且man前面有数字的行:
grep -n '[0-9]man' manpath.config
Note:中括号[]里面不论有几个字符,它都只代表某一个字符。
2、与反向选择^结合使用
- 查找不包含指定字符的内容
查找包含man而且前面没有/的那一行:
grep -n '[^/]man' manpath.config
代码语言:javascript复制查找包含man但是前面不是小写字符的那一行:
grep -n '[^a-z]man' manpath.config
3、与行首 ^
和行尾 $ 字符结合
代码语言:javascript复制列出行首为MANPATH_MAP的行:
grep -n '^MANPATH_MAP' manpath.config
列出开头是大写字符的那一行:
grep -n '^[A-Z]' manpath.config
列出开头不是英文字母的行:
grep -n '^[^a-zA-Z]' manpath.config
^
符号在字符集合(中括号[])之内和外面是不同的!!!
在[]
里面代表反向选择,在[]
外面代表定位在行首的意思
反过来思考,使用$
来查找行尾字符:
找出行尾结束符为点.的行:
grep -n '.$' manpath.config
因为小数点具有特殊的意义,所以必须用转义字符加以解除其特殊意义。
查找出空白行:
grep -n '^$' manpath.config
4、任意一个字符.
与重复字符*
在bash当中,通配符*可以用来代表任意(0或多个)字符,但是正则表达式并不是通配符,两者之间是不相同的。
在正则表达式当中:
.
代表绝对有一个字符的意思*
代表重复前一个字符0到无穷多次的意思,为组合形态
实例:
代码语言:javascript复制查找包含一个o以上的行,需要oo*:
grep -n 'oo*' manpath.config
查找以g开头与以g结尾,中间至少存在一个o的行:
grep -n 'goo*g' manpath.config
5、{}
限定连续字符范围
我们可以利用.
与*
来设置0到无穷多个重复字符。那如果要限制一个范围区间内的重复字符呢?
比如要找出2-5个o的连续字符串,就要用到限定范围的字符{}了。
但是{}
的符号在shell有特殊意义,因此要用到转义字符。
实例:
代码语言:javascript复制找出g后面有两个到五个o,后面再接一个g的字符串:
grep -n 'go{2,5}g' manpath.config
如果是2个以上呢:
grep -n 'go{2,}g' manpath.config
这样就OK了。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179045.html原文链接:https://javaforall.cn