linux下文件查找与文件内容查找
Linux
下文件查找主要使用 find
命令,而根据文件内容查找主要使用 grep
命令。
find
find
命令用来在指定目录下查找文件。
任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则
find
命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
选项
find
命令在 linux操作中详细介绍了。
例子
表示当前目录下查找文件名开头是字符串 'lib' 的文件 1
find . -name 'srm*'
grep
使用了那么久的 grep
命令,就会一个
grep 'helloworld'
,竟然不知道可以利用 grep
来搜索文件内容。总结下 grep
的用法。
1 | grep [OPTIONS] PATTERN [FILE...] |
或者使用 正则表达式
: 1
grep [OPTIONS] [-e PATTERN]... [-f FILE]... [FILE...]
选项
-a 不要忽略二进制数据。
-A <显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-b 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-c 计算符合范本样式的列数。
-C <显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-d <进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
-e <范本样式> 指定字符串作为查找文件内容的范本样式。
-E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
-f <范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
-F 将范本样式视为固定字符串的列表。
-G 将范本样式视为普通的表示法来使用。
`-h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。`
-H 在显示符合范本样式的那一列之前,标示该列的文件名称。
-i 忽略字符大小写的差别。
-l 列出文件内容符合指定的范本样式的文件名称。
-L 列出文件内容不符合指定的范本样式的文件名称。
-n 在显示符合范本样式的那一列之前,标示出该列的编号。
-q 不显示任何信息。
-R/-r 此参数的效果和指定“-d recurse”参数相同。
-s 不显示错误信息。
-v 反转查找。
-w 只显示全字符合的列。
-x 只显示全列符合的列。
-y 此参数效果跟 "-i" 相同。
-o 只输出文件中匹配到的部分。
pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^: 匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<: 从匹配正则表达 式的行开始。
\\>: 到匹配正则表达式的行结束。
[ ]: 单个字符,如[A]即A符合要求 。
[ - ]: 范围,如[A-Z],即A、B、C一直到Z都符合要求 。
**.** : 所有的单个字符。
\* : 有字符,长度可以为0。
例子
显示/usr/src目录下的文件(不含子目录)包含magic的行 1
grep magic /usr/src
1
grep -r magic /usr/src
只匹配整个单词,而不是字符串的一部分(如匹配 'magic',而不是 'magical'
), 1
grep -w pattern files
只搜索 header 和 source 文件: 1
grep -inr --include \*.h --include \*.cpp ./Source
参考
[1] linux下的find文件查找命令与grep文件内容查找命令 [2] grep命令 [3] find命令 [4] How can I grep recursively, but only in files with certain extensions?