📋
rfコマンドを使った基本的なYAMLフィルタリング
基本的なYAMLフィルタリング
rfコマンドを使って基本的なYAMLファイルのフィルタリングを行う方法を解説します。
コマンドの説明
YAMLファイルのフィルタリングを行うにはrfコマンドのサブコマンドにyamlを指定します。textサブコマンドと同様にyaやyと短くすることもできます。これにより、YAMLをパースしRubyのオブジェクトに変換した結果をレコードとして扱うことができます。
> rf yaml 'コマンド' ファイルパス
# ファイルパスを省略すると標準入力から読み込む
> rf yaml 'コマンド'
# jsonは短くすることもできる
> rf ya 'コマンド' <ファイルパス>
> rf y 'コマンド' <ファイルパス>
出力形式
yamlフィルタではデフォルトでyamlフォーマッタが選択されます。そのため、出力はYAML形式になります。
利用例
実際の利用例を紹介します。
YAMLファイルを色付けして表示する
JSONフィルタ同様にYAMLフィルタにも色付けして出力する機能があります。例として以下のようなYAMLファイルを入力してみます。
example-1.yaml
foo: 1
bar: 2
baz:
hoge: 3
fuga: 4
rfコマンドを実行してみます。
> rf y _ example-1.yaml
出力は以下のように色付されたJSONになります。

なお、パイプやリダイレクトにより出力先がターミナルではない場合は、自動的に色付け出力が無効化されます。
> rf y _ example-1.yaml | cat

出力先によらず常に色付け出力を強制したい場合には --color オプションを使用します。
特定の文字列を含むレコードのみ表示する
YAMLフィルタでも正規表現でYAMLマップをフィルタすることができます。どういうことか具体例で説明します。以下のようなYAMLがあったとします。
example-2.yaml
- foo
- foo: bar
- hoge: fuga
- - foobar
- bar: foobar
この中からfooという文字列が含まれるレコードのみ抜き出します。
> rf y /foo/ example-2.yaml
foo
foo: bar
- foobar
bar: foobar
JSONフィルタ同様にfooが含まれているレコードが選択されました。
ネストされたYAMLマップから値を抜き出す
JSONフィルタ同様にネストされたYAMLマップから値を抜き出せます。以下のファイルを例として説明します。
example-3.yaml
foo:
bar:
baz:
- hoge
- fuga
- hige
rfコマンドで抜き出してみましょう。
# Rubyにおいて配列は0-indexedなので注意
> rf y 'foo.bar.baz[1]' example-3.yaml
fuga
Discussion