我在MacOS中使用grep (BSD grep) 2.5.1-FreeBSD,我发现了以下行为。
我有两个*.tex文件。它们中的每一行都包含以下行
$k$-th bit of
$(i-m)$-th bit of分别使用。当我跑的时候
grep --color -rnw . -e '\$-th bit of' --include="*.tex" 我只得到了第二个文件,即$(i-m)$第9位,而我期望的是这两行。你能帮我理解一下这个行为吗?
发布于 2018-07-27 21:40:16
切勿使用-r或--include或任何其他grep选项来查找文件。GNU的家伙们真的搞砸了,他们把这些选项添加到grep中,当有一个名为find的完美工具用于查找文件,现在他们已经把grep变成了一个复杂的杂乱无章的查找文件和全局匹配文件内的正则表达式并打印结果(G/RE/P)的工具。
保持简单-使用find查找文件,然后在其中使用g/re/p,然后使用grep
find . -name '*.tex' -exec grep --color -n '\$-th bit of' {} +正如其他人指出的,您的g/re/p问题出在-w arg上,所以我在上面删除了它。
发布于 2018-07-27 20:28:37
我有相同版本的grep。
这是由您使用-w选项引起的:
-w, --word-regexp
The expression is searched for as a word (as if surrounded by `[[:<:]]' and `[[:>:]]'; see re_format(7)).字符串$k$-th bit of的匹配部分在左侧以单词字符(即k)为界,因此匹配被视为在“单词”中,因此不能满足“作为一个完整的单词进行搜索”的要求。
在不使用-w的情况下尝试,它会工作得很好。
https://stackoverflow.com/questions/51557835
复制相似问题