🔖

Rustでcut/awk/grepを再設計:拡張版cutコマンド「xcut」を作った話

に公開

✨ はじめに

Unix系のコマンド cutawkgrep は便利ですが、以下のような悩みはありませんか?

  • 条件付きの列抽出が面倒
  • 正規表現と列指定を組み合わせづらい
  • PowerShellやWindows環境での互換性に乏しい

そこで今回、RustでCLIツール「xcut」を自作しました。


🧰 xcutとは

「xcut」は、ログファイルやCSVなどのテキスト処理に特化した、Rust製の軽量&高速なcut系ツールです。

xcut --input access.log --filter 'col(3) == "INFO"' --cols 1,4

cut/awk/grepの機能を1つに統合し、シンプルな構文でパワフルな抽出処理が行えます。


🔧 主な機能と使い方

1. 列の抽出

xcut --input file.txt --cols 1,3

2. 正規表現でのフィルタ

xcut --filter 'col(3) =~ "^INFO"'

3. 複雑な条件式にも対応(AND, OR)

xcut --filter 'col(3) != "DEBUG" && col(4) =~ "CPU"'

4. 区切り文字と最大分割数の指定

xcut --delim ',' --max-split 4

5. head / tail 相当の機能

xcut --head 10
xcut --tail 5

6. 出力をファイルに保存

xcut --output result.txt

🛠 技術的ハイライト

  • Rust + clap で引数パース
  • filter式の構文パーサと動的評価(eval)
  • Regex による強力なパターンマッチ
  • anyhow による柔軟なエラーハンドリング
  • 単体テスト・CLIテストあり

🚀 今後の展望

  • Windows PowerShellの完全対応
  • filter式の構文強化
  • CSV専用モードの追加
  • cargo install xcut での導入対応(crates.io登録)

🧪 GitHub / インストール方法

brew tap kyotalab/xcut
brew install xcut

🙌 最後に

気に入ったらGitHubにStar ⭐️ よろしくお願いします!
https://github.com/kyotalab/xcut

フィードバックやIssueも歓迎です。

Discussion