Regex 为什么是格雷普;文件*.txt";output.txt不工作

Regex 为什么是格雷普;文件*.txt";output.txt不工作,regex,grep,glob,Regex,Grep,Glob,我有一个文件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或grep“file?.txt”output.txt不给出结果 提前感谢grep命令将参数处理为regex

我有一个文件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或grep“file?.txt”output.txt
不给出结果


提前感谢

grep命令将参数处理为regex,其中
*
的含义与终端(glob)中的含义不同。
相关:

grep
不使用全局模式匹配。它使用正则表达式,因此您应该:

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

谢谢你不知道。玩了一下,得到了一个新的谜题。根据您所说的
grep file.\.*output.txt
应该只能找到file1.txt和file2.txt,但是搜索结果显示:
/help/files\u write.txt/vim80/filetype.txt/home/file1.txt/home/file2.txt
为什么会这样?请先阅读关于regex的内容
*
将前一个字符的多次出现与零匹配,因此
*
将匹配任意数量的任何字符,这就是全局模式
*
在您的问题中所做的。如果你只想匹配一个字符,你的问题应该包括glob模式
文件?.txt
,而相应的正则表达式应该是
文件。\.txt
,其中未替换的
匹配任何字符。是的,我读过那篇文章。但我不明白为什么
\.*
*
一样,就像我理解的
grep文件一样。\..*output.txt
应该搜索文件?。点后的任何字符。但它正在搜索文件后面的任何字符?很抱歉,如果这令人困惑。@Glebster您应该引用正则表达式,否则反斜杠将由shell解释,而不会传递给
grep
。注意细节对于linux来说至关重要!非常感谢。