1

在 bash 上,我有以下(典型)场景:

~/some/dir$ find | grep java

例如,它的输出

./subdir1/subdir2/file1.java
./subdir1/subdir3/file2.java
./subdir1/subdir4/file3.java
./subdir1/subdir2/file4.java
./subdir1/subdir6/file5.java

现在我知道file5.java我正在寻找的文件(例如)在那个子目录上,所以我执行:

vi subdir1/subdir6/file5.java

但为了做到这一点,我必须输入路径(我知道使用 TAB 键可以加快速度)或复制并粘贴路径到文件

问题是:bash(或任何其他shell)上是否有引用上一个命令输出的行的快捷方式/变量,所以我可以说

vi [whatever the previous command returned on the 5th line]

,这将是一个很好的节省时间

谢谢!

4

3 回答 3

2

借助 BASH 历史,您可以接近[whatever the previous command returned on line 5]

这是一个例子

 $ find -name "*.java"
 src/file1.java
 ...
 src/file5.java
 ...
 $ vi $( !! | head -5 | tail -1 )

在此示例中!!表示[whatever the previous command returned]命令再次执行。

以下命令 是从输入| head -5 | tail -1中说的一种相当尴尬的方式[take line 5]

如果您在特定文件名之后,您也可以在搜索表达式中将其指定为

$ vi $( !find | grep file5 )

如果find执行需要很长时间,您可以将输出保存find到文件中并改用该文件。

$ find -name "*.java" | tee filelist.save
 src/file1.java
 ...
 src/file5.java
 ...
 $ vi $( grep file5 filelist.save )
于 2012-04-27T17:58:35.987 回答
1

在您的 grep 命令中添加 -n 5 即可。

~/some/dir$ 查找 | grep -n 5 java

于 2012-04-27T17:47:38.180 回答
0

这个工具正是我需要的:

http://facebook.github.io/PathPicker/

于 2015-07-13T20:31:02.883 回答