如何引用先前输出的特定行?

时间:2012-04-27 17:39:52

标签: linux bash shell command-line

在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]

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

谢谢!

3 个答案:

答案 0 :(得分: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 )

答案 1 :(得分:1)

在grep命令中添加-n 5就可以做到这一点。

〜/ some / dir $ find | grep -n 5 java

答案 2 :(得分:0)

这个工具正是我所需要的:

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