emacs find-grep grep

时间:2011-04-01 19:23:26

标签: emacs grep xargs

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

找到... | xargs ... | grep -v“include”

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

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

有人对此有任何建议吗?

解决方案:

我在Cento 5.5机器上这样做。由于旧版本的grep,它原来是一个问题。我在我的主目录中安装了最新版本的grep,现在一切都很好。

2 个答案:

答案 0 :(得分:2)

通过评论“调试”问题后,这是一个适合您的解决方案。将其添加到.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))))))

答案 1 :(得分:0)

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

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

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

相关问题