【问题标题】:(Windows › Cygwin › grep › Notepad++) Open grep-found files with spaces(Windows › Cygwin › grep › Notepad++) 用空格打开 grep 找到的文件
【发布时间】:2019-10-08 21:07:47
【问题描述】:

我将 Notepad++ 添加到 Cygwin。我希望能够找到文件并用一个命令打开它们,我想到了这样的事情:

npp $(grep -l -r 'phrase')

问题是它似乎无法打开名称中包含空格的文件... :( 可以修改此命令来完成这项工作吗?

【问题讨论】:

  • 引用可能会有所帮助,npp "$(grep -l -r 'phrase')"
  • @WiktorStribiżew 谢谢,很遗憾没有:cygpath: can't convert empty path 很抱歉误删了您的评论。

标签: grep cygwin


【解决方案1】:

grep -l 用换行符分隔文件名。您需要将换行符视为参数拆分器, 而不是在普通空间上分裂。

另外,在生成要操作的文件列表时,xargs 是有序的。

$ grep -l -R 'regex' | xargs -d '\n' npp

如果您的文件名中可能有换行符(是的,在 Windows 上不太可能),请使用 null 作为分隔符:

$ grep -l -R -Z 'regex' | xargs -0 npp

输入更少,启动更通用。

【讨论】:

  • 谢谢。我的测试文件里面有“ico”文本。如果我使用:$ grep -l -R 'ico' | xargs -d '\n' npp 我得到:xargs: npp: No such file or directory
  • 正如错误所说:xargs 看不到命令​​调用 nppnpp 在您的$PATH 上吗?是别名吗? $ type npp 说什么?
  • > "npp 在你的 $PATH 上吗?它是别名吗?"在 * .baschrc* 文件(主目录)中,我添加了:npp () { /cygdrive/c/Program\ Files/Notepad++/notepad++.exe -multiInst -nosession -noPlugin $(cygpath -w -- "$@") } > “$ type npp 说什么?” npp is a function npp () { /cygdrive/c/Program\ Files/Notepad++/notepad++.exe -multiInst -nosession -noPlugin $(cygpath -w -- "$@") }
  • 别名和 shell 函数只能在 bash 中工作。 Xargs 需要一个实际的命令。因此,将您的 npp 设为一个 shell 脚本,并将其放在您的 $PATH 上的文件夹中。还有其他选项,但它们不适合评论!
  • > "让你的 npp 成为一个 shell 脚本并把它放在你的 $PATH" 你愿意指出如何做到这一点吗?我是这个领域的初学者,我可以研究如何制作“shell脚本”,但我不知道我的“$PATH”应该放什么。
【解决方案2】:

值得写出另一种方法来解决这个问题。 命令替换(即$() 构造)将命令的输出拆分为单独的参数。 它拆分$IFS 变量中的字符。 默认情况下,这些是三个空白字符 spacetabnewline

由于您不太可能在文件名中遇到换行符或制表符, 一种选择是修改$IFS,删除空格字符。

$ IFS=$'\t\n'
$ npp $(grep -l -r 'regex')

我不建议你全局更改$IFS

【讨论】:

  • > "我不建议您全局更改 $IFS。"为什么? (我应该问这个问题比这个帖子更好的地方吗?)
  • 其他脚本可能会依赖其默认值,而设置$IFS的脚本极为罕见。成语是,如果你改变它,你应该把它改回来。
  • IFS 命令一直有效,直到我关闭 Cygwin(即使我以管理员身份运行 Cygwin)。我在 Cygwin 文件夹中搜索了 IFS 文件,但无济于事。但这很棒,至少可以暂时起作用:)。
  • 在这种情况下,IFS 不是一个命令,它是一个 shell 变量。当你设置它时,它只存在于那个 bash 进程中。如果它具有 export 属性,它将被放入 bash 启动的任何新进程的环境中。 IFS 通常不导出。 bash 响应许多变量。如果您希望 IFS 始终具有非默认值,则需要在 bash 的许多启动文件中的适当一个中设置它。
  • 感谢您澄清这一点。我需要 Google 存储 IFS 值的位置然后:) .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 1970-01-01
  • 2017-04-01
  • 2017-12-14
  • 2022-01-27
  • 1970-01-01
相关资源
最近更新 更多