使用 grep 匹配同一行上出现两个标记的位置

Using grep to match where two tokens occur on the same line

我正在阅读手册页,并找到 this 博客 post,两者似乎说的是同一件事,但它不起作用。

我有一个项目需要批量替换像

这样的行
import Foo from '/modules/foo/client/components/Foo.jsx';

进入

import Foo from '/modules/foo/client/imports/Foo.jsx';

但我不想匹配像这样的行:

import Base from '/client/components/Base.jsx';

即: 只有 "imports" 来自基础目录 /modules.

我试过了

$ grep -R "modules.+components" modules/

但未找到匹配项。

如有任何帮助,我们将不胜感激。谢谢!

默认情况下,grep 将模式解释为基本正则表达式 (BRE)(未扩展 -E)并按字面意思处理 一些 正则表达式元字符。因此 + 在您当前的方法中没有特殊含义。

Any meta-character with special meaning may be quoted by preceding it with a backslash.

grep -R "modules.\+components" modules/

https://www.gnu.org/software/grep/manual/grep.html#index-grep-programs


关于BREhttps://www.regular-expressions.info/posix.html#bre