🔖
Rustでcut/awk/grepを再設計:拡張版cutコマンド「xcut」を作った話
✨ はじめに
Unix系のコマンド cut
や awk
、grep
は便利ですが、以下のような悩みはありませんか?
- 条件付きの列抽出が面倒
- 正規表現と列指定を組み合わせづらい
- 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 / インストール方法
- GitHub Releases からダウンロード(https://github.com/kyotalab/xcut/releases)
- Homebrew でインストール(macOS / Linux)
brew tap kyotalab/xcut
brew install xcut
🙌 最後に
気に入ったらGitHubにStar ⭐️ よろしくお願いします!
https://github.com/kyotalab/xcut
フィードバックやIssueも歓迎です。
Discussion