grep命令
1. grep简介
grep是通用正则表达式分析程序(General Regular Expression Parser)的缩写。
grep命令可以在它的输入中搜索指定的字符串模式。grep输出的是包含输入中指定的字符串模式的行。
一般格式为:grep [option] pattern file
grep命令常用开关(option)
开关 | 描述 |
---|---|
-E | 用扩充正则表达式进行模式匹配 |
-i | 不区分大小写 |
-n | 在每一输出行前显示文件内的行号 |
-q | 与其他命令一起使用时,抑止输出显示 |
-s | 抑止文件的出错信息 |
-v | 反向匹配 |
-l | 返回匹配到的文件名称 |
-r | 递归搜索 |
2. 正则表达式
基本元字符 | 描述 |
---|---|
^ | 在每行的开始进行匹配 |
$ | 在每行的末尾进行匹配 |
< | 在单词的开始进行匹配 |
\> | 在单词的末尾进行匹配 |
. | 对单个字符进行匹配 |
[str] | 对str中的任意单个字符进行匹配 |
[^str] | 对任意不在str中的单个字符进行匹配 |
[a-b] | 对a和b之间的任何字符进行匹配 |
\ | 抑止后面的一个字符的特殊含义 |
- | 对前一项进行零次或多次重复匹配
扩展元字符 | 描述 |
---|
- | 对前一项进行一次或多次重复匹配
? | 对前一项进行0次或1次重复匹配
{?} | 对前一项进行j次重复匹配
{j,} | 对前一项进行至少j次重复匹配
{,k} | 对前一项进行至多k次重复匹配
{j, k} | 对前一项进行j到k次重复匹配
s | t | 匹配s项或t项中的一项
(exp) | 将exp作为单项处理
3. grep中使用正则表达式
注意:
(1) 由于在shell环境下使用grep命令, shell会对一些特殊字符进行转义处理,为了防止这种情况,有两种解决方案:
(a) 单引号:阻止shell对特殊字符的解析
(b) 双引号:只能阻止部分的字符,比如()[]等,不能阻止shell对\和$的解析
很多时候都使用单引号!
(2) 对于扩展元字符,grep需要使用-E选项!
命令 | 解释 |
---|---|
grep -n public *.txt | 在当前目录下的所有.txt文件中查找包含public的行 |
grep -l public *.txt | 输出包含public的文件名 |
ps aux | grep 'ssh' | grep -v 'grep' | 输出包含ssh的进程,但排除包含grep的项 |
grep -lr telnet /etc | 递归搜索目录etc中的所有文件,输出包含telnet的文件名 |
4. vi中使用正则表达式
在命令模式下进行
命令 | 用途 |
---|---|
😒/aa.*zz// | 在当前行中删除从aa到zz的所有字符 |
:1,$s/&/and/g | 在整个文件用and替换所有的&字符。如果没有g,则替换每一行中的第一个& |
:1,$s/and/&/g | 在整个文件用&替换所有的and。注意&需要使用\进行转义 |
:1,$s/^/new/g | 在每一行的行首插入字符串new |
:1,5s/$/@@ | 在第1行到第5行的行尾插入字符串@@ |
😒/[1][0-9]*// | 去掉行首的所有数字字符 |
0-9 ↩︎