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 ↩︎

浙公网安备 33010602011771号