grep 删除匹配行 grep deleted_文件名

如果要说Linux上有什么命令是值得学习和使用的,那么grep一定是值得推荐的。

在文本搜索的时候,这个命令是非常有用,可以节省很多时间。

当然,由于过于依赖这些命令,小编这几年在文档整理这块做的越来越懒散,通常都把所有的都集中放,需要使用时,用命令搜索关键词就行?

是不是有疑问,切换到windows系统咋办?

没关系!windows也有可以实现类似于grep命令的功能软件-dngrep,妈妈再也不用担心我找不到文件了!


什么是grep?


grep命令来搜索文本。通过在给定文件(目录)中搜索包含与给定字符串或单词匹配的行。它是Linux和Unix系统中最有用的命令之一。

“grep”一词,来源于ed(文本编辑器)下的一个命令,名称来自于g/re/p(globally search a regular expression and print,以正则表达式进行全局查找以及打印)。在ed下,输入g/re/p这个命令后,会将所有符合先定义样式的字符串,以行为单位打印出来。

Linux 中的grep命令语法

  1. grep 'word' 文件名–搜索文件名中包的任何word
  2. grep -i 'bar' 文件名 –不区分大小写的搜索“ bar”一词
  3. grep -R 'foo' . – 当前目录及其所有子目录中的所有文件中搜索单词“ foo”
  4. grep -c 'hello' readme.md – 搜索并显示字符串“ hello”出现在名为readme.md的文件中的总次数。

grep语法的常见使用场景如下:

grep 'word' filename   #在filename中查找匹配wordgrep 'word' file1 file2 file3   #在file1 file2 file3中查找匹配wordcat otherfile | grep 'something'   #将otherfile中的内容打印到终端,然后使用grep匹配其内容是否有somethingcommand | grep 'something'   #command命令的结果中查找是否含有字符串somethinggrep --color[=never/auto/always] 'data' filename   #在filename文件中找出字符串data,并由color参数确定颜色高亮


如何在Linux上使用grep搜索文件?


在/ etc / passwd文件中搜索bruce用户,输入:

grep bruce /etc/passwd

grep 删除匹配行 grep deleted_grep 删除匹配行_02

可以强制使用-i 参数忽略单词大小写,即匹配bruce,Bruce,BRUCE和所有其他组合:

grep -i "bruce" /etc/passwd


如何使用grep递归搜索文件


您可以递归搜索,即在每个目录下的所有文件中搜索字符串“ 127.0.0.1”

sudo grep -r "127.0.0.1" /etc/

sudo grep -R "127.0.0.1" /etc/

示例输出:

grep 删除匹配行 grep deleted_字符串_03

如果搜索到相关记录,那么在每一行都能看到结果。

(例如/etc/hosts:127.0.0.1localhost)。可以使用-h option以下方法禁止在输出数据中包含文件名:

grep -h -R "127.0.0.1" /etc/

grep -hR "127.0.0.1" /etc/

示例输出:

grep 删除匹配行 grep deleted_lsof |grep delete卡住_04


如何使用grep仅搜索单词


当搜索某个词(比如:word)时,grep将匹配所有含有word的单词。您可以强制grep命令仅选择包含组成整个单词的匹配项的行,即仅完全匹配单词word:

grep -w "word" file

grep 删除匹配行 grep deleted_搜索_05


如何使用grep搜索2个不同的单词


使用egrep命令,如下所示:

egrep -w 'word1|word2' /path/to/file

grep 删除匹配行 grep deleted_lsof |grep delete卡住_06


单词匹配后如何计算行数


grep可以使用-c(count)选项计算有多少个匹配项:

grep -c 'word' /path/to/file

使用-n参数显示行号:

grep -n 'root' /etc/passwd

grep 删除匹配行 grep deleted_字符串_07


强制grep反转匹配


您可以使用-v 参数 打印反转匹配;也就是说,仅匹配不包含给定单词的那些行。例如,打印不包含bar的所有行

grep -v bar /path/to/file

grep 删除匹配行 grep deleted_文件名_08


Linux管道和grep命令


grep命令通常与shell管道命令(|)一起使用。在此示例中,显示硬盘设备的名称:

dmesg | egrep '(s|h)d[a-z]'

显示cpu型号名称:

cat /proc/cpuinfo | grep -i 'Model'

grep 删除匹配行 grep deleted_字符串_09

上述显示CPU型号的命令也可以按如下方式使用,这就无需结合管道命令:

grep -i 'Model' /proc/cpuinfo


如何仅列出匹配文件的名称?


使用-l选项可以只列出含有匹配字符所在的文件夹名,而不用显示具体行。

比如下面的例子就是显示哪些C语言文件里面含有main的文件名:

grep -l 'main' *.c

grep 删除匹配行 grep deleted_字符串_10


Linux中的grep命令参数总结


通过上面的列子,可以总结出下面的grep命令常见的参数使用表。

虽然本文说的是Linux系统,但是grep命令同样适用于类Unix系统,所以,如果你有macOS系统的话,也可以说使用的哦。

-i

忽略Linux和Unix上的区分大小写

-w

强制仅匹配整个单词

-v

选择不匹配的行

-n

 打印出行号

-h

在输出中取消文件名路径

-r

递归搜索目录

-R

递归搜索目录,但是遵循所有符号链接

-I

仅显示具有选定行的文件名称

-c

每个文件仅显示选定行的数量

--color

以颜色显示匹配的图案