linux数据处理(二)

156 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天

-r 参数:在所有子目录和子文件中查找

如果你不知道你要找的文本在哪个文件里,你可以用强大的 -r 参数。

r 是英语 recursive 的缩写,表示“递归”。

如果用了 -r 参数,那么 grep 命令使用时的最后一个参数(grep text file 这个模式中的 file)需要换成 directory,也就是必须是一个目录。因为 -r 参数是让 grep 命令能够在指定目录的所有子目录和子文件中查找文本。

例如:

grep -r "Hello World" folder/

表示在 folder 这个目录的所有子目录和子文件中查找 Hello World 这个文本。当然了,以上例子中,folder 后面的斜杠(/)不是必须的,这里只是为了清楚表明 folder 是一个目录。只要 folder 是一个目录,Linux 系统是不会搞错的。

Linux 中还有一个 rgrep 的命令,它的作用相当于 grep -r 。

grep 的高级用法:配合正则表达式

正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。

grep 配合正则表达式就可以实现比较高级的搜索了。

我们首先来看一眼以下的这个表格,表格中列出了最常用的一些正则表达式的字符以及其含义:

特殊字符含义
.匹配除 “\n” 之外的任何单个字符
行首(匹配输入字符串的开始位置)
$行尾(匹配输入字符串的结束位置)
[]在中括号中的任意一个字符
?问号前面的元素出现零次或一次
*星号前面的元素可能出现零次、一次或多次
+加号前面的元素必须出现一次以上(包含一次)
逻辑或
()表达式的分组(表示范围和优先度)

当然了,上表没有列出所有的正则表达式的字符。

首先,为了让 grep 命令知道我们要使用正则表达式,须要加上 -E 参数(E 是 extended regular expression 的第一个字母,表示“扩展的正则表达式”)。例如:

grep -E Alias .bashrc

当然了,Linux 也有一个命令 egrep,其效果等同 grep -E 。

到此为止,没什么新鲜的。我们用正则表达式只是和之前的搜索类似。接下来,我们才真的要用到正则表达式的特殊字符了。

首先来看这个例子:

grep -E ^alias .bashrc

这个例子中,我们用到了 ^ 这个特殊符号,上面的表格里对于 ^ 已经做了说明:行首(匹配输入字符串的开始位置)。也就是说,^ 后面的字符须要出现在一行的开始。

再来举几个例子:

grep -E [Aa]lias .bashrc

[] 的作用,是将 [] 中的字符任取其一,因此 [Aa]lias 的意思就是既可以是 Alias,又可以是 alias。因此 grep 的搜索结果把包含 Alias 和 alias 的行都列出来了。

再比如:

grep -E [0-4] .bashrc

用于搜索包含 0 至 4 的任一数字的行。

grep -E [a-zA-Z] .bashrc

用于搜索包含在 a 至 z 之间的任意字母或者 A 至 Z 之间的任意字母的行。

其他正则表达式还有很多例子。就不一一列举了。