📋

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になります。
色付されたYAMLの出力

なお、パイプやリダイレクトにより出力先がターミナルではない場合は、自動的に色付け出力が無効化されます。

> rf y _ example-1.yaml | cat

色付けが無効化されたYAMLの出力

出力先によらず常に色付け出力を強制したい場合には --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
GitHubで編集を提案

Discussion