我运行这个命令
egrep "\" string_demo | wc -l
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
akshay@akshay-K53SC:~/shell$ egrep "\" string_demo | wc -l
> abc
> pqr
> xyz
>
Run Code Online (Sandbox Code Playgroud)
">" 将继续,直到我按下Ctrl+ D。那么这是什么?
还有grep,egrep和之间的确切区别是什么fgrep?
当您发出时egrep "\" string_demo | wc -l,您的 shell 将被\视为反斜杠转义并继续接受输入,PS2直到您输入 EOF ( Ctrl+ D)。
在这些情况下,您需要使用单引号来逃避 shell 的解释。更准确地说,如果要在文件中搜索文字反斜杠,请使用:
grep '\\' file.txt
Run Code Online (Sandbox Code Playgroud)
例子:
$ grep '\\' file.txt
eagle,dove\ ,cat
Run Code Online (Sandbox Code Playgroud)
在这里我做了两个更改,首先使用单引号 ( '') ,其次用于\\告诉grep我要查找文字\,否则grep将显示以下错误:
$ grep '\' file.txt
grep: Trailing backslash
Run Code Online (Sandbox Code Playgroud)
简而言之,您可以通过以下方式编写命令:
使用 Bash 的进程替换:
wc -l < <(grep '\\' string_demo)
Run Code Online (Sandbox Code Playgroud)使用常用方法:
grep '\\' string_demo | wc -l
Run Code Online (Sandbox Code Playgroud)****不要使用egrep,它已被弃用而支持grep -E.
查看U&L 的这篇文章以了解grep, grep -E&之间的差异grep -F。