4

我尝试对 emacs 的 find-grep 的结果进行 grep,所以我使用以下命令:

找到... | xargs ... | grep -v "包括"

结果确实显示在grep缓冲区中,但是当我在尝试转到该文件的每个条目上按 Enter 时,emacs 说该文件不存在。在 minibuffer 上,在文件的完整路径之前,有一个 ^[[K 字符。这基本上使整个文件名无法识别。我查看了 grep 的手册,仍然不确定我能做些什么。

我可能不必这样做,但我只是不确定如何传递两种模式,一种用于 grep,另一种用于逆 grep。(可能是正则表达式?)

有人对此有什么建议吗?

解决方案:

我在 Cento 5.5 机器上执行此操作。由于旧版本的 grep,这是一个问题。我在我的主目录中安装了最新版本的 grep,现在一切都很好。

4

2 回答 2

3

通过评论“调试”问题后,这是一个适合您的解决方案。将其添加到您的 .emacs 并对其进行自定义,以便正则表达式匹配您要从文件名中删除的特殊字符: ^[[K

(defadvice compilation-find-file (before compilation-find-file-strip-odd-chars activate)
  "Strip the ^[[K in the input string"
  (let ((filename (ad-get-arg 1)))
    (save-match-data
      (when (string-match "^\\[\\[K" filename)
        (ad-set-arg 1 (replace-match "" nil nil filename))))))
于 2011-04-05T17:18:31.593 回答
0

我有同样的问题,但无法更改我的 grep 版本,所以我使用了一种解决方法。问题似乎是 greps 行结尾,所以我只是通过 awk 运行 grep 的结果并按原样打印它们。

... | grep -v blaa | awk '{print $0}'

这解决了我的问题,虽然我不知道为什么。

于 2012-06-06T06:41:24.427 回答