0

以下は、gem environmentコマンドの出力です。

○ gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 1.8.23
  - RUBY VERSION: 1.9.3 (2012-04-20 patchlevel 194) [x86_64-darwin10.8.0]
  - INSTALLATION DIRECTORY: /Users/userme/.rbenv/versions/1.9.3-p194/gemsets/global
  - RUBY EXECUTABLE: /Users/userme/.rbenv/versions/1.9.3-p194/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/userme/.rbenv/versions/1.9.3-p194/gemsets/global/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-10
  - GEM PATHS:
     - /Users/userme/.rbenv/versions/1.9.3-p194/gemsets/global
     - .bundle
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
     - :sources => ["http://rubygems.org/"]
     - "gem" => "--no-rdoc --no-ri"
  - REMOTE SOURCES:
     - http://rubygems.org/
userme at userme in ~

行の直前のストライピング中のawk行をキャプチャするコマンドは何でしょうか?/Users/userme/.rbenv/versions/1.9.3-p194/gemsets/global- GEM PATHS:-/Users/userme/.rbenv/versions/1.9.3-p194/gemsets/global

4

3 に答える 3

2

使用する方法は次のsedとおりです。

sed -n '/- GEM PATHS:/ { N; s/.* - //p }' file

そして、あなたが:awkの使用に精通しているなら、を 使用する別の方法getline

awk '/- GEM PATHS:/ { getline; sub(/.* - /,""); print }' file

そうでなければ、これはおそらくあなたが最も安全な賭けです:

awk 'n && !--n { sub(/.* - /,""); print } /- GEM PATHS:/ { n = 1 }' file

結果:

/Users/userme/.rbenv/versions/1.9.3-p194/gemsets/global
于 2012-12-03T11:12:16.147 に答える
2

を使用awkすると、出力を次のようにパイプ処理できます。

awk '{if(e){sub (/^ *- */,"",$0);print;e=0}}/GEM PATHS/{e=1}'

次のように機能します。

  • eエコー)フラグは0から始まるため、エコーは無効になります。
  • エコーフラグが設定されているすべての行について、最初<spaces>-<spaces>に行の先頭でを削除し、変更された行をエコーし​​てから、フラグをリセットします。
  • 行が見つかるとGEM PATHS、前のルールを使用して次の行が出力されるようにフラグを設定します。

これが実際の動作の小さなトランスクリプトです。

pax> echo 'RubyGems Environment:
  - RUBYGEMS VERSION: 1.8.23
  - GEM PATHS:
     - /Users/userme/.rbenv/versions/1.9.3-p194/gemsets/global
     - .bundle
  - GEM CONFIGURATION:
     - :update_sources => true
' | awk '{if(e){sub (/^ *- */,"",$0);print;e=0}}/GEM PATHS/{e=1}'
/Users/userme/.rbenv/versions/1.9.3-p194/gemsets/global
于 2012-12-03T08:09:33.530 に答える
2

試す:

$ gem env gempath
/home/mpapis/.rvm/gems/ruby-1.9.3-p286:/home/mpapis/.rvm/gems/ruby-1.9.3-p286@global

:LinuxにあるPATH_SEPARATORで区切られたすべてのパスが表示されます

于 2012-12-03T08:02:42.503 に答える