欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

查找文本内容命令 grep

程序员文章站 2022-06-22 19:57:37
...

grep算是一个十分常用的linux命令了,用于查找文本,是加强版的ctrl+F,下面介绍一些常用的命令参数。

1. 显示所在行数、文件名、最大匹配个数等。

➜  ~ cat settings.json
{
    "window.zoomLevel": 0,
    "editor.fontSize": 14,
    "breadcrumbs.enabled": true,
    "editor.renderWhitespace": "none",
    "terminal.integrated.rendererType": "canvas",
    "terminal.integrated.fontWeightBold": "normal",
    "editor.minimap.enabled": false,
    "workbench.activityBar.visible": true,
    "terminal.integrated.shell.osx": "/bin/zsh"
}%

cat是打印文本内容的命令,这里不详述,主要是为了和grep的查找结果做对照。

  • grep -n [string] [file]: 显示[string]在[file]文件中的所在行数及内容,这里中括号[string]表示传入字符串,其他类似。
➜  ~ grep -n true settings.json
4:    "breadcrumbs.enabled": true,
9:    "workbench.activityBar.visible": true,
  • grep -H [string] [file]: 显示[string]在[file]文件中的所在文件及内容
➜  ~ grep -H true settings.json setting1.json
settings.json:    "breadcrumbs.enabled": true,
settings.json:    "workbench.activityBar.visible": true,
setting1.json:    "breadcrumbs.enabled": true,
  •  grep -m [num] [string] [file]: 显示[string]在[file]文件中出现[num]次的所在文件及内容。
➜  ~ grep -m 1 true settings.json
    "breadcrumbs.enabled": true,
➜  ~ grep -m 2 true settings.json
    "breadcrumbs.enabled": true,
    "workbench.activityBar.visible": true,
  • grep -v [string] [file]: 在[file]文件中查找不含有[string]的内容
➜  ~ grep -v true settings.json
{
    "window.zoomLevel": 0,
    "editor.fontSize": 14,
    "editor.renderWhitespace": "none",
    "terminal.integrated.rendererType": "canvas",
    "terminal.integrated.fontWeightBold": "normal",
    "editor.minimap.enabled": false,
    "terminal.integrated.shell.osx": "/bin/zsh"
}
  •  grep -e [string1] -e [string2] [file]: 在[file]文件中查找含有[string1]或含有[string2]的行
➜  ~ grep -e enable -e true settings.json
    "breadcrumbs.enabled": true,
    "editor.minimap.enabled": false,
    "workbench.activityBar.visible": true,
  • grep -i: 不区分大小写查找
  • grep -w: 字符串完全匹配
  • grep -C [num]: 展示匹配行上下[num]行内容

2. 文件及目录查找限制

  • grep -l [string] [files]: 在各文件[files]中展示含有[string]的文件名
  • grep -L [string] [files]: 在各文件[files]中展示不含有[string]的文件名
➜  ~ grep -l true settings.json instance.csv
settings.json
➜  ~ grep -L true settings.json instance.csv
instance.csv
  • grep [string] -R [dir]: 在目录[dir]下查找含有[string]的行数
➜  ~ grep true -R setting
setting/settings.json:    "breadcrumbs.enabled": true,
setting/settings.json:    "workbench.activityBar.visible": true,

 

3. 多条件查找

  • 命令可以叠加使用,如既展示文件名又展示行数,并且限制展示个数
➜  ~ grep -Hn -m 2 true setting1.json settings.json
setting1.json:4:    "breadcrumbs.enabled": true,
settings.json:4:    "breadcrumbs.enabled": true,
  •  grep -v -e [string1] -e [string2] [file] :查找既不含string1又不含string2的行内容
➜  ~ grep -v -e enable -e true settings.json
{
    "window.zoomLevel": 0,
    "editor.fontSize": 14,
    "editor.renderWhitespace": "none",
    "terminal.integrated.rendererType": "canvas",
    "terminal.integrated.fontWeightBold": "normal",
    "terminal.integrated.shell.osx": "/bin/zsh"
}
  • grep [string1] [file] | grep [string2] :查找既含有string1又含有string2的行内容,这里要用到通道符'|',简单说就是'|'前面命令的输出作为'|'后面命令的输入,
➜  ~ grep enable settings.json | grep true
    "breadcrumbs.enabled": true,
  • grep -l [string] -R [dir]: 查找目录[dir]下含有[string]的文件名
➜  ~ grep -l true -R setting
setting/settings.json