在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]
,这将是一个很好的节省时间
谢谢!
答案 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)
这个工具正是我所需要的: