【问题标题】:Why grep "file*.txt" output.txt does not work为什么 grep "file*.txt" output.txt 不起作用
【发布时间】:2020-06-11 21:57:21
【问题描述】:

我有一个包含内容的文件 output.txt:

/usr/share/vim/vim80/doc/filetype.txt
/home/adminuser/trening/file1.txt
/home/adminuser/trening/file2.txt

为什么grep "file1.txt" output.txt 给出正确的结果和 grep "file*.txt" output.txt or grep "file?.txt" output.txt 没有结果?

提前谢谢你

【问题讨论】:

    标签: regex grep glob


    【解决方案1】:

    grep 命令将参数作为正则表达式处理,其中* 的含义与终端(glob)中的含义不同。 相关:Using the star sign in grep

    【讨论】:

      【解决方案2】:

      grep 不使用全局模式匹配。它使用正则表达式,所以你应该这样做:

      grep "file.*\.txt" output.txt
      

      【讨论】:

      • 谢谢你不知道。玩弄它并得到了一个新的谜题。按照你说的grep file.\.* output.txt应该只能找到file1.txt和file2.txt 但是搜索结果却是:/help/files_write.txt /vim80/filetype.txt /home/file1.txt /home/file2.txt 为什么会这样?
      • 请先阅读正则表达式。 * 匹配零到多次出现的前一个字符,因此 .* 匹配任意数量的任意字符,这就是 glob 模式 * 在您包含在问题中的那个中所做的。如果您只想匹配一个字符,您的问题将包含 glob 模式 file?.txt,而相应的正则表达式将是 file.\.txt,其中未转义的 . 匹配任何字符。
      • 是的,我读过那篇文章。但我不明白为什么\.*.* 相同据我所知grep file.\..* output.txt 应该搜索文件?点后的任何字符。但它正在搜索文件后的任何字符?抱歉,如果这令人困惑。
      • @Glebster 你应该引用正则表达式,否则反斜杠将被 shell 解释而不传递给grep
      • 注意细节对于linux来说至关重要!谢谢
      猜你喜欢
      • 1970-01-01
      • 2011-04-17
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 2012-11-10
      相关资源
      最近更新 更多