【问题标题】:Using grep to match where two tokens occur on the same line使用 grep 匹配两个标记出现在同一行的位置
【发布时间】:2017-10-27 15:12:29
【问题描述】:

我正在阅读手册页,发现 this 博客帖子,两者似乎都说同样的话,但它不起作用。

我有一个项目需要批量替换行,例如

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';

即:仅从基本目录/modules“导入”。

我试过了

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

但没有找到匹配项。

对此的任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 您写道您需要替换行,但grep 只会搜索匹配项。那么,你的最终目标是什么?
  • 我一直使用 grep,但总是一次搜索一个关键字。我只是想确保我不会错过任何东西,作为验证工具。

标签: linux command-line grep debian-based


【解决方案1】:

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

任何具有特殊含义的元字符都可以在它前面引用 带有反斜杠。

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

【讨论】:

  • @YanickRochon,好主意,是的......它按字面意思处理一些正则表达式元字符,因为 BRE . 也匹配任何字符,包括换行符,而 + 应该被转义\+
猜你喜欢
  • 2018-08-14
  • 2015-01-06
  • 2011-05-28
  • 2014-03-03
  • 1970-01-01
  • 2015-04-24
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多