这个 egrep 命令起什么作用?

这个 egrep 命令起什么作用?

我运行这个命令

egrep "\" string_demo | wc -l

我得到以下输出:

akshay@akshay-K53SC:~/shell$ egrep "\" string_demo | wc -l
> abc
> pqr
> xyz
> 

">" 会一直持续,直到我按下Ctrl+ D。那么这是什么?

grepegrep和之间究竟有什么区别fgrep

答案1

当您发出时egrep "\" string_demo | wc -l,您的 shell 会将其\视为反斜杠转义并继续进行输入,PS2直到您输入 EOF ( Ctrl+ D)。

在这些情况下,您需要使用单引号来避免被 shell 解释。更准确地说,如果您想在文件中搜索文字反斜杠,请使用:

grep '\\' file.txt

例子:

$ grep '\\' file.txt 
eagle,dove\ ,cat

这里我做了两处修改,首先使用单引号(''),其次用来\\表明grep我想要查找文字\,否则grep会显示以下错误:

$ grep '\' file.txt 
grep: Trailing backslash

简而言之,您的命令可以按以下方式编写:

  • 使用 Bash 的流程替代

    wc -l < <(grep '\\' string_demo) 
    
  • 使用通常方法:

    grep '\\' string_demo | wc -l
    

****不要使用egrep,它已被弃用,取而代之的是grep -E

查看U&L 的这篇文章得到grepgrep -E&之间的差异grep -F

答案2

egrep搜索文件中引号中您指定要搜索的wc -l行,并计算行数。您基本上是在告诉 egrep 计算其中带有反斜杠的行数,然后 letwc -l计算这些行数。

答案3

“>” 将一直持续,直到我按下 Ctrl + D。那么这是什么?

  • bash 使用 > 来表示它需要更多输入。这就是为什么它仅在按下ctrl+时结束的原因,这模拟了 EOF 。在您的命令中,不是一个完整的模式,因为第二个模式被 转义,并且需要终止匹配。D"\" string demo"\"

grep、egrep 和 fgrep 之间究竟有什么区别?

man egrep

  • egrep 是相同作为 grep -E. fgrep 是 相同 就像 grep -F. rgrep 一样 相同 即 grep -r。直接调用 egrep 或 fgrep 即可已弃用,但提供允许历史应用依赖它们无需修改即可运行。*

  • grep -E :提供的模式是扩展正则表达式

  • grep -F :提供的模式逐字匹配
  • grep -r :在所有文件中递归查找。提供目录名称而不是文件名

相关内容