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(または他のシェル)に、前のコマンドによって出力された行を参照するショートカット/変数があるかどうかです。

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 に答える