三剑客之grep

grep初级简单使用:Liunx查找&过滤-CSDN博客

正则表达式-CSDN博客

目录

grep分类

返回值 

使用返回值控制流程

grep参数示例

基本参数

grep与正则表达式的搭配使用与示例

看完正则与示例进行无答案式练习


  grep 用于在文件或输入流中查找特定模式或文本。它的名称来源于 "Global Regular Expression Print",可以使用正则表达式来匹配文本。它有许多变体和扩展,支持不同的搜索方法和功能。

grep分类

grep 的主要版本

  • grep:这是基本的 grep 命令,支持基础的文本搜索和简单的正则表达式。
  • egrep:指 "Extended GREP",支持扩展正则表达式(ERE)。在现代 grep 版本中,egrepgrep -E 的同义词。
  • fgrep:指 "Fixed GREP",用于搜索固定的字符串,而不是正则表达式。在现代 grep 版本中,fgrepgrep -F 的同义词。
  • grep  -P 支持 Perl 兼容正则表达式(PCREs),使 grep 能够处理更复杂的正则表达式模式

egrepfgrep 通常被视为 grep -Egrep -F的同义词,提供更好的兼容性和功能统一性。

返回值 

grep 命令的返回值是一个非常有用的特性,用于判断搜索操作的结果。根据 grep 的执行情况,返回值可能会有所不同。这些返回值可以在脚本和自动化任务中用于控制流程。

  • 0:表示至少找到了一条匹配的行。 即找到拉,表示正确。
  • 1:表示没有找到匹配的行。就是没找到。
  • 2:表示发生错误,如文件无法读取或参数不正确。即找的地不对

使用返回值控制流程

在 Bash 脚本和命令行中,返回值可以通过 $? 获取

1.基本示例
# 查找文件中是否包含 "pattern"
grep "pattern" filename.txt
# 检查返回值
if [ $? -eq 0 ]; then
  echo "Match found"
else
  echo "No match found"
fi



2.使用 && 和 ||
返回值也可以与逻辑操作符结合,用于更简洁的控制流程。
# 如果找到匹配的行,打印 "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 ]; then
  echo "Error occurred"
fi


4.结合 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.txt

egrep 'NW' d*.txt

egrep '^n' datafile.txt

egrep '4$' datafile.txt

egrep TBSavage datafile.txt

egrep 'TB Savage datafile.txt'

egrep '5\..' datafile.txt

egrep '\.5' datafile.txt

egrep '^[we]' datafile.txt

egrep '[^0-9]' datafile

egrep  '[A-Z][A-Z] [A-Z]' datafile

egrep 'ss*' datafile

egrep '[a-z]{9}' datafile

egrep '\<north' datafile

egrep '\<north\>' datafile

egrep '\<[a-r].*n\>' datafile

egrep '^n\w*\W' datafile

egrep '\bnorth\b' datafile

egrep 'NW|EA' datafile

egrep '3+' datafile

egrep '2\.?[0-9]' datafile

egrep '(no)+' datafile

egrep 'S(h|u)' datafile

egrep 'Sh|u' datafile



  • 23
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZDICT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值