我怎么做到的?- 文件内容已删除!

我怎么做到的?- 文件内容已删除!

首先,感谢您对这个论坛的贡献!几个月前,我因为工作原因换到了 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

如果此方法能解决您的问题,请告知我们!

相关内容