![我怎么做到的?- 文件内容已删除!](https://linux22.com/image/1115207/%E6%88%91%E6%80%8E%E4%B9%88%E5%81%9A%E5%88%B0%E7%9A%84%EF%BC%9F-%20%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%E5%B7%B2%E5%88%A0%E9%99%A4%EF%BC%81.png)
首先,感谢您对这个论坛的贡献!几个月前,我因为工作原因换到了 ubuntu,这些页面帮了我大忙!
现在,说到重点:我试图计算文本文件中的特定模式:grep -c [pattern] [filename] 现在:模式是:“大于”符号,即:> 因此我给出的命令是:grep -c > [filename] 我收到此消息:用法:grep [OPTION] ... PATTERN [FILE] ... 尝试“grep --help”获取更多信息。
但是现在文本文件是空的!(幸好我有备份……)。为什么?我之前的操作是不是搞错了,还是我最后给出的命令?我只是想弄清楚这一点。
答案1
您正在查看输出重定向(Bash)。通过将常规输出“stdout”重定向到filename
,您将覆盖它。但是,错误输出“stderr”仍会显示(默认情况下在您的终端中)。这就是您看到的帮助文本。
要实际使用>
grep 中的字符作为匹配的字符,逃脱将其放入你的 shell (Bash) 中,例如
grep -c \> myfile
将其放在引号之间'>'
也可以。
上面链接中的一段代码更全面地解释了重定向:
COMMAND_OUTPUT >
# Redirect stdout to a file.
# Creates the file if not present, otherwise overwrites it.
ls -lR > dir-tree.list
# Creates a file containing a listing of the directory tree.
[..]
1>filename
# Redirect stdout to file "filename."
1>>filename
# Redirect and append stdout to file "filename."
2>filename
# Redirect stderr to file "filename."
2>>filename
# Redirect and append stderr to file "filename."
&>filename
# Redirect both stdout and stderr to file "filename."
答案2
从技术上讲,前面的答案是准确的,但我认为它绕开了用户对他们试图做什么的整体了解。让我们关注你做错了什么,然后重写命令,这样你就可以在文件中找到“>”的条目了。
(解释文件被转储的原因)如果您在行尾使用 >(尝试“ls > directory.txt”),您将清除 directory.txt(如果存在),并输入命令的结果。如果您使用 >>,它只会附加(添加到末尾)任何现有文件。“grep”没有意识到您实际上是在搜索“>”,而不是想将输出导入您想要搜索的文件中。因此,它只是将任何内容转储到您有数据的文件中。
就你的情况而言,你可能想使用这个:
grep -c -- '>' filename.ext
如果此方法能解决您的问题,请告知我们!