Ruby awk cmd从标准输出捕获行
以下是Ruby awk cmd从标准输出捕获行,ruby,bash,rubygems,awk,Ruby,Bash,Rubygems,Awk,以下是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
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 ~
在-GEM路径下,捕获/Users/userme/.rbenv/versions/1.9.3-p194/gemsets/global
行的awk
命令是什么?
在/Users/userme/.rbenv/versions/1.9.3-p194/gemsets/global
行之前剥离-
,尝试:
$ gem env gempath
/home/mpapis/.rvm/gems/ruby-1.9.3-p286:/home/mpapis/.rvm/gems/ruby-1.9.3-p286@global
它将显示所有用路径分隔符分隔的路径,该分隔符在linux上为:
请尝试:
$ gem env gempath
/home/mpapis/.rvm/gems/ruby-1.9.3-p286:/home/mpapis/.rvm/gems/ruby-1.9.3-p286@global
它将显示所有用路径分隔符分隔的路径,该分隔符是
:
在linux上使用awk
,您可以通过以下管道输出:
awk '{if(e){sub (/^ *- */,"",$0);print;e=0}}/GEM PATHS/{e=1}'
其工作原理如下:
(echo)标志从0开始,因此将禁用回显e
- 对于设置了回显标志的每一行,它首先删除行开头的
,回显修改后的行,然后重置标志-
- 当它找到一个
行时,它设置标志,以便使用前面的规则输出下一行GEM路径
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/gemests/global
使用
awk
,您可以通过以下管道输出:
awk '{if(e){sub (/^ *- */,"",$0);print;e=0}}/GEM PATHS/{e=1}'
其工作原理如下:
(echo)标志从0开始,因此将禁用回显e
- 对于设置了回显标志的每一行,它首先删除行开头的
,回显修改后的行,然后重置标志-
- 当它找到一个
行时,它设置标志,以便使用前面的规则输出下一行GEM路径
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/gemests/global
下面是使用
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
下面是使用
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
不需要
,$0
arg for sub(),因为这是默认值。另外,如果您将对“e”的测试移动到脚本的条件部分,而不是将其包装在脚本的操作部分的if子句中,那么它会更糟糕,即e{foo}
而不是{if(e){foo}
。不需要,默认情况下,$0
arg for sub()。另外,如果您将对“e”的测试移动到脚本的条件部分,而不是将其包装在脚本的操作部分的if子句中,则会更加糟糕,即对于非getline awk解决方案,e{foo}
而不是{if(e){foo}
+1,但是请注意,如果您想要的模式位于文件末尾(可能在某些其他情况下),则getline解决方案的行为将不受欢迎。+1对于非getline awk解决方案,但请注意,如果您想要的模式位于文件末尾(可能在某些其他情况下),则getline解决方案的行为将不受欢迎。