Linux命令:grep
Linux grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。 grep
指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep
指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -
,则 grep
指令会从标准输入设备读取数据。
语法
1
2
3
grep [options] pattern [files]
- pattern - 表示要查找的字符串或正则表达式。
- files - 表示要查找的文件名,可以同时查找多个文件,如果省略 files 参数,则默认从标准输入中读取数据。
常用选项
- -i:忽略大小写进行匹配。
- -v:反向查找,只打印不匹配的行。
- -n:显示匹配行的行号。
- -r:递归查找子目录中的文件。
- -l:只打印匹配的文件名。
- -c:只打印匹配的行数。 在单个文件中查询指定字符串
常用用法
- 在单个文件中查询指定字符串
1
grep "literal_string" filename
- 在多个文件中查找指定字符串,FILE_PATTERN 表示文件通配符表示。比如当前目录下的所有文件 ./*
1
grep "string" FILE_PATTERN
- 查找的过程中忽略大小写
1
grep -i "string" FILE
- 使用正则表达式来查找字符串。
1
grep "REGEX" filename
- ? 0到1次
*
0到多次+
1到多次- {n} 之匹配n次
- {n,} 最少n次
- {,m} 最多m次
- {n,m} 匹配最少n次,最多m次
- 匹配完整的单词,而不是子串。
1
grep -iw "is" demo_file # 只会完整的匹配is这个单词
- 现在匹配字符串前面/后面/前后两边的字符串。(After/Before/Around)。
1 2 3
grep -A 3 -i "example" demo_text # After 连着打印“example” 单词后的2行,共3行 grep -B 3 -i "example" demo_text # Before 连着打印“example” 单词前的2行,共3行 grep -C 3 -i "example" demo_text # Both 连着打印“example” 单词前后的2行,共5行
- 使用 GREP_OPTIONS 高亮grep的显示结果
1 2 3
export GREP_OPTIONS='--color=auto' GREP_COLOR='100;8' # 或者别名一下 alias grep='grep --color=auto'
- 使用 -r 参数来实现递归的搜索目录
1
grep -r "ramesh" *
- 取反搜索结果
1
grep -v "go" demo_text # 显示哪些不包含 go 子串的行
- 取反(多个)指定模式的匹配结果
1
grep -v -e "pattern1" -e "pattern2" filename # 显示不符合pattern1和pattern2的结果的数据
- 计算出命中匹配的总行数
1
grep -c "pattern" filename # 6
- 用 -l 只显示匹配命中的文件名称,而不显示具体匹配的内容。
- 只显示匹配中的字符串,而不是一行。
1
$ grep -o "is.*line" demo_file # 只显示 is 和 line 之间的字符串
- 显示匹配的字符串位置。该位置是相对于整个文件的字节位置,不是行数
1
grep -o -b "pattern" file
- 使用 -n 显示匹配的字符串在文件中的行数。
1
grep -n "go" demo_text
本文由作者按照 CC BY 4.0 进行授权