我运行这个命令
egrep "\" string_demo | wc -l
我得到以下输出:
akshay@akshay-K53SC:~/shell$ egrep "\" string_demo | wc -l
> abc
> pqr
> xyz
>
">" 会一直持续,直到我按下Ctrl+ D。那么这是什么?
grep
、egrep
和之间究竟有什么区别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 的这篇文章得到grep
、grep -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 :在所有文件中递归查找。提供目录名称而不是文件名