grep初级简单使用:Liunx查找&过滤-CSDN博客
正则表达式-CSDN博客
目录
grep分类
返回值
使用返回值控制流程
grep参数示例
基本参数
grep与正则表达式的搭配使用与示例
看完正则与示例进行无答案式练习
grep
用于在文件或输入流中查找特定模式或文本。它的名称来源于 "Global Regular Expression Print",可以使用正则表达式来匹配文本。它有许多变体和扩展,支持不同的搜索方法和功能。
grep分类
grep
的主要版本
grep
:这是基本的grep
命令,支持基础的文本搜索和简单的正则表达式。egrep
:指 "Extended GREP",支持扩展正则表达式(ERE)。在现代grep
版本中,egrep
是grep -E
的同义词。fgrep
:指 "Fixed GREP",用于搜索固定的字符串,而不是正则表达式。在现代grep
版本中,fgrep
是grep -F
的同义词。
egrep
和 fgrep
通常被视为 grep -E
和 grep -F
的同义词,提供更好的兼容性和功能统一性。
返回值
grep
命令的返回值是一个非常有用的特性,用于判断搜索操作的结果。根据 grep
的执行情况,返回值可能会有所不同。这些返回值可以在脚本和自动化任务中用于控制流程。
- 0:表示至少找到了一条匹配的行。 即找到拉,表示正确。
- 1:表示没有找到匹配的行。就是没找到。
- 2:表示发生错误,如文件无法读取或参数不正确。即找的地不对
使用返回值控制流程
在 Bash 脚本和命令行中,返回值可以通过 $?
获取
1.基本示例
# 查找文件中是否包含 "pattern"
grep "pattern" filename.txt
# 检查返回值
if [ $? -eq 0 ]; thenecho "Match found"
elseecho "No match found"
fi2.使用 && 和 ||
返回值也可以与逻辑操作符结合,用于更简洁的控制流程。
# 如果找到匹配的行,打印 "Found"
grep "pattern" filename.txt && echo "Found"# 如果没有找到匹配的行,打印 "Not found"
grep "pattern" filename.txt || echo "Not found"3.处理错误
如果 grep 返回值为 2,表示发生了错误,您可以采取相应的措施。
grep "pattern" non_existent_file.txt
if [ $? -eq 2 ]; thenecho "Error occurred"
fi4.结合 set -e
在 Bash 脚本中,set -e 可以用于在命令失败时停止脚本。如果使用 grep 来控制流程,结合 set -e 可以确保脚本在错误时停止。set -e
# 如果没有匹配,脚本将停止
grep "pattern" filename.txt
grep参数示例
基本参数
(这里记住常用的就行,其它做个了解)
-i
:忽略大小写。-v
:反向匹配,即显示不包含匹配模式的行。-c
:返回匹配行的计数。-n
:显示匹配行的行号。-l
:仅显示包含匹配行的文件名。-o
:仅显示匹配的部分,而不是整个行。-r
或-R
:递归搜索,适用于目录。-E
:使用扩展正则表达式。-F
:使用固定字符串搜索。-s
:抑制错误消息。-q
:静默退出,不输出任何内容。-x
:匹配整个行,而不是部分行。--color
:高亮显示匹配的部分。--exclude
:排除特定文件或目录。--include
:仅搜索特定文件或目录。-B N
:显示匹配行前面的N
行。-A N
:显示匹配行后面的N
行。-C N
:显示匹配行前后各N
行。
基本搜索
# 查找包含 "hello" 的行
grep "hello" file.txt忽略大小写
# 忽略大小写查找 "HELLO"
grep -i "HELLO" file.txt反向匹配
# 查找不包含 "error" 的行
grep -v "error" file.txt查找包含特定文本的文件
# 查找当前目录中包含 "error" 的文件
grep -l "error" *.log显示行号
# 显示匹配行的行号
grep -n "pattern" file.txt返回匹配行的计数
# 返回匹配 "error" 的行数
grep -c "error" file.txt显示匹配部分
# 仅显示匹配的部分
grep -o "pattern" file.txt递归搜索
# 递归搜索目录中的文件
grep -r "pattern" /path/to/directory/使用扩展正则表达式
# 查找包含数字的行
grep -E "[0-9]" file.txt高亮显示匹配
# 高亮显示匹配的部分
grep --color "pattern" file.txt显示前后行
# 显示匹配行及其前后各 2 行
grep -C 2 "pattern" file.txt
grep与正则表达式的搭配使用与示例
匹配行首和行尾
# 匹配以 "hello" 开头的行
grep -E "^hello" filename.txt# 匹配以 "world" 结尾的行
grep -E "world$" filename.txt匹配多种模式
# 匹配 "cat" 或 "dog"
grep -E "cat|dog" filename.txt# 匹配 "error" 或 "warning"
grep -E "error|warning" filename.txt使用字符类
# 匹配包含数字的行
grep -E "[0-9]" filename.txt# 匹配包含字母的行
grep -E "[a-zA-Z]" filename.txt使用量词
# 匹配包含至少一个数字的行
grep -E "[0-9]+" filename.txt# 匹配包含零到两个 "x" 的行
grep -E "x{0,2}" filename.txt复杂的正则表达式
# 匹配包含单词 "hello" 后面跟着一个或多个空格和 "world" 的行
grep -E "hello +world" filename.txt# 匹配包含零或多个字母 "a" 和 "b" 的行
grep -E "(a|b)*" filename.txt递归查找
# 在目录中递归查找包含特定模式的文件
grep -rE "pattern" /path/to/directory/
看完正则与示例进行无答案式练习
egrep 'NW' datafile.txtegrep 'NW' d*.txtegrep '^n' datafile.txtegrep '4$' datafile.txtegrep TBSavage datafile.txtegrep 'TB Savage datafile.txt'egrep '5\..' datafile.txtegrep '\.5' datafile.txtegrep '^[we]' datafile.txtegrep '[^0-9]' datafileegrep '[A-Z][A-Z] [A-Z]' datafileegrep 'ss*' datafileegrep '[a-z]{9}' datafileegrep '\<north' datafileegrep '\<north\>' datafileegrep '\<[a-r].*n\>' datafileegrep '^n\w*\W' datafileegrep '\bnorth\b' datafileegrep 'NW|EA' datafileegrep '3+' datafileegrep '2\.?[0-9]' datafileegrep '(no)+' datafileegrep 'S(h|u)' datafileegrep 'Sh|u' datafile