uvf コマンド操作マニュアル — 無料版の CLI で巨大ファイルを探す

UwView シリーズ — 探す UwView・比べる UwDiff

巨大なファイルを開いて探すのは UwView、2つのファイル・フォルダを比べるのは UwDiff。どちらも Windows・macOS・Linux で動きます。→ UwDiff の操作マニュアル(CLI uvd)

uvf(無料版の CLI)
コマンド操作マニュアル
uvp(UwView Pro の CLI)
コマンド操作マニュアル

uvf コマンド操作マニュアル

対象:uvf v1.9.0 “Full Spectrum”(無料版 UwView の CLI)。

uvf --help は要点だけを並べたものです。このページは、書き方の決まりと例をまとめて説明します。探す道具としては ripgrep と同じ立場なので、ripgrep と比べながら説明します(対応表は11章、性能は13章)。
UwView Pro の uvp は uvp コマンド操作マニュアル を、画面(GUI)は UwView 操作ガイド を見てください。

▶ 動画で見る:YouTube の再生リスト「UwView:日本語」(v1.7.3.6「Wide Field」の使い方 全8テーマとまとめの1本・English・チャンネル @uwviewapp)


目次


1. uvf でできること

  • 大きなテキストファイル(ログ、CSV、OSM の XML など)を速く検索する
  • 複数のファイルをまとめて検索する(ワイルドカード・サブフォルダーも)
  • ワイルドカードで広げたとき、.ignore・.gitignore に当たるファイルを ripgrep と同じ規則で外す(4.7)
  • gz・bz2・xz・lzma・zst・lz4・br の圧縮ファイルを、展開しながらそのまま検索する(外部コマンドは使いません)
  • Word・Excel・PDF(.docx・.docm・.xlsx・.xlsm・.pdf)の中の文字を、取り出しながら検索する(索引は作りません。6.2)
  • 結果を GUI(UwView)で開く

索引(.uwvz)を作って2回目以降を速くする機能、zip・pbf の読み込み、集計や置換は UwView Pro の uvp の機能です。


2. 基本の形(2つだけ)

uvf ファイル 検索語 [オプション]        検索して結果を出す
uvf -open [ファイル] [検索語]            GUI を起動する(ファイルがあれば開き、検索語があれば検索まで)

例:

uvf app.log ERROR                  # app.log から ERROR を含む行を出す
uvf app.log 'connection reset'     # 空白を含む検索語は引用符で囲む
uvf app.log ERROR -i               # 大文字小文字を区別しない
uvf -open app.log ERROR            # GUI で開いて ERROR を検索した状態にする

検索語は、既定では文字列そのままで探します(正規表現ではありません)。正規表現で探すときは -E を付けます(7章)。

オプションの位置は自由です(ファイルと検索語の前でも後でも構いません)。ただし -open だけは先頭か末尾に書きます。


3. 検索のオプション

オプション 意味 例
-i 大文字小文字を区別しない uvf app.log error -i
-E 検索語を正規表現として扱う(7章) uvf app.log 'code=5\d\d' -E
-v 当てはまらない行を出す uvf app.log DEBUG -v
--json 1行に1つの JSON で出す(5章) uvf app.log ERROR --json
-H ファイル名を必ず付ける uvf app.log ERROR -H
-h ファイル名を付けない(-h だけを書くと使い方を表示) uvf '*.log' ERROR -h
--files 検索せず、ファイルの指定が何に広がるかだけを出す(除外した本数も出す) uvf '**/*.log' --files
--no-ignore .ignore・.gitignore による除外をしない(--ignore-file で足した規則は効く。4.7) uvf '**/*.log' ERROR --no-ignore
--no-ignore-files --ignore-file で足した規則も使わない(4.7) uvf '**' ERROR --no-ignore --no-ignore-files
--ignore-file <ファイル> 除外の規則を足す。何回でも書ける(4.7) uvf '**' ERROR --ignore-file my.ignore
--raw Excel のセルを、表示されている値ではなく元の値で取り出す(6.2) uvf 売上.xlsx 0.5 --raw
-open 結果を GUI で表示する(複数ファイルでも使える。8章) uvf app.log ERROR -i -open

そのほか:

コマンド 意味
uvf --help 使い方
uvf --help files ファイルの指定の詳しい説明
uvf --help regex 正規表現の詳しい説明
uvf --version 版数(例:uvf 1.9.0 (build 26.10.13.22))
uvf --tune [ファイル] [--apply] この機械に合うスレッド数を測る(9章)

4. ファイルの指定(1本・複数・ワイルドカード・除外)

4.1 いちばん大事な決まり:必ず引用符で囲む

複数のファイルやワイルドカードは、全体を1つの引用符で囲みます。 シェルに広げさせず、uvf が自分で広げます。

uvf '*.log' ERROR           # ○
uvf *.log ERROR             # ✕ シェルが広げてしまう → エラーになります
uvf a.log b.log ERROR       # ✕ 同じ理由でエラー
uvf 'a.log b.log' ERROR     # ○

引数は「ファイルの指定」と「検索語」の2つだけ、と覚えてください。

4.2 区切り

  • 空白かカンマで、複数のファイルを書けます。
  • カンマが1つでもあれば、カンマだけで区切ります。 名前に空白を含むパス(Program Files など)はカンマで区切ってください。
  • 波かっこ { } の中のカンマ・空白では区切りません('app.log{,.*.gz}' は 1 つの指定です。4.5)。
uvf 'a.log b.log' ERROR
uvf 'logs/*.log,err/*.log' ERROR
uvf 'C:/Program Files/app/*.log,D:/logs/*.log' ERROR     # 空白を含むパスはカンマで

4.3 使える記号

記号 意味 例
* 任意の文字の並び。フォルダーの区切り(/)はまたがない uvf '*.log' ERROR
? 任意の1文字 uvf 'app-0?.log' ERROR
** フォルダーを何段でも(0段も含む) uvf '**/*.log' ERROR
{a,b} a か b(波かっこ。v1.9.0 から。決まりは 4.5) uvf '**/*.{txt,log}' ERROR
[ ] 使えません(文字どおりの名前として扱います) uvf 'app[1].log' ERROR(app[1].log という名前のファイル)

4.4 例

コマンド 対象
uvf '*.log' ERROR 今のフォルダーの .log
uvf 'logs/*.log' ERROR logs の直下の .log
uvf '*/*.log' ERROR 1段下のフォルダーの .log(今のフォルダーの .log は含まない)
uvf '**/*.log' ERROR 今のフォルダー以下すべての .log(サブフォルダーも)
uvf 'logs/**/*.log' ERROR logs 以下すべての .log
uvf 'logs/**' ERROR logs 以下のすべてのファイル
uvf '**/2026-09/*.log' ERROR どこかにある 2026-09 フォルダーの直下の .log
uvf 'app.log,app.log.*.gz' ERROR 平文と gz を混ぜて
uvf '**/*.{txt,log}' ERROR 今のフォルダー以下すべての .txt と .log
uvf 'app.log{,.*.gz}' ERROR app.log と app.log.*.gz('app.log,app.log.*.gz' と同じ)
uvf 'logs/2026-{09,10}/*.log' ERROR logs/2026-09 と logs/2026-10 の .log
uvf '/var/log/app/*.log' ERROR 絶対パスでも書けます

4.5 決まりごと

  • 並び:書いた順。1つの指定の中は名前順です。同じファイルは1回だけ探します。
  • 隠しファイル・隠しフォルダー(. で始まる名前など)は、どの OS でも対象外です(ripgrep と同じ。Windows では .git・.gitignore などを探してしまっていたのを 1.7.3.2 で直しました)。
  • 大文字と小文字:Linux は区別します。Mac と Windows は区別しません。
  • .uwvz(UwView Pro の索引)はワイルドカードでは拾いません。
  • 1件も当たらない指定は、その指定を名前で知らせます(黙って0件にしません)。
  • 波かっこ {a,b}(v1.9.0 から):
  • 入れ子({a,{b,c}})と空の選択肢({,.gz})が使えます。
  • 1 つの指定から広がるのは 1,000 通りまでです。超えると止めます(終了コード 2)。
  • 閉じていないもの({a,b)と、カンマの無いもの({} {a})は、文字どおりの名前として扱います。
  • 書いたとおりの名前のファイルが実在するときは、広げずにそのファイルを使います。
  • 1件も当たらないときは、波かっこを書いたままの形で知らせます(一部の選択肢だけが当たらないときは知らせません)。
  • 画面の「コマンドライン」のファイル指定の欄でも同じです。
  • 1,000本を超えると知らせます(止めません)。目安は環境変数 UVF_MANY_FILES で変えられます。
  • フォルダー名だけ('logs')は使えません。'logs/**' と書いてください。
  • シンボリックリンクのフォルダーはたどりません。
  • パスの区切りは / と \ のどちらでも書けます(Windows)。
  • .ignore・.gitignore に当たるものは、ワイルドカードで広げたときに外します(4.7)。隠しファイルを外すのとは別の決まりです。

4.6 何が対象になるか確かめる:--files

検索する前に、指定が何に広がるかを確かめられます。

$ uvf 'logs/**/*.log' --files
1   logs/app.log
2   logs/2026-09/app-0901.log
3   logs/2026-09/app-0902.log

除外(4.7)で外したものがあれば、最後に本数を出します(標準エラー出力)。対象になるファイルの組み合わせは rg --files と同じです(出力は番号付きなので、形は違います。.rgignore は読みません)。

4.7 除外(.ignore・.gitignore)

ワイルドカードで広げたファイルのうち、.ignore・.gitignore に当たるものは探しません(v1.7.2.5 から)。
主な規則は ripgrep と同じで、UwTest/uv_ignore_test.sh の突き合わせで、対象の一覧と検索結果が ripgrep と一致することを確かめています。違いは .rgignore を読まないことです。
.gitignore などに bin/ obj/ と書いてあれば、'**' で探してもそれらを読みません(git で管理しているだけでは外れません。規則に書かれているものが外れます)。

決まり 内容
効く範囲 ワイルドカードで広げたファイルだけ。名前を書いたファイルは除外しません(uvf 'build/app.log' 語 は build が除外されていても探します)
名前を書いたフォルダー 'build/**' のように先頭に書いたフォルダーは除外しません。中のファイルは規則で見ます(ripgrep に rg 語 build/ と渡したときと同じ)
読むファイル .ignore・.gitignore・.git/info/exclude・git の全体設定(~/.gitconfig の [core] excludesFile。無ければ ~/.config/git/ignore)
.gitignore が効くのは git のリポジトリの中だけ(どこかの親フォルダーに .git がある)。.ignore はリポジトリの外でも効きます
親フォルダー 探し始めたフォルダーより上の除外ファイルも効きます(.gitignore はリポジトリの根まで)
強さ .ignore → .gitignore → .git/info/exclude → 全体設定 → --ignore-file の順に強い。同じ種類なら深いフォルダーのほうが強い
除外したフォルダー 中を見ません(大きな node_modules なども読まないので速い)。中のファイルを ! で戻すこともできません(git と同じ)
大文字・小文字 区別します(git・ripgrep と同じ。4.5 のファイルの指定の決まりとは別)
.rgignore 読みません(ripgrep 専用の名前です。必要なら同じ中身を .ignore に書いてください)

書き方(.gitignore と同じ):

書き方 意味
空行・# で始まる行 無視(# そのものを書くときは \#)
*.log どの深さの .log にも当たる
/build その除外ファイルがあるフォルダーの直下だけ(先頭の / で固定)
doc/*.md 途中に / があれば、その除外ファイルのフォルダーから見たパス
build/ フォルダーだけに当たる
* ? [a-z] [!a-z] ワイルドカード(* ? は / をまたがない)。除外の書き方では [ ] が使えます(4.3 のファイルの指定では使えません)
**/tmp・out/**・a/**/b 何段でも
!keep.log 除外を取り消す。後の行が勝ちます
行末の空白 無視(空白そのものは \)

改行が CRLF(Windows)の除外ファイルや、先頭に BOM のあるものも読みます。

オプション:

オプション 意味 例
--no-ignore .ignore・.gitignore・.git/info/exclude・全体設定による除外をしない。--ignore-file で足した規則は効いたままです(ripgrep 15 と同じ) uvf '**' ERROR --no-ignore
--no-ignore-files --ignore-file で足した規則も使わない(ripgrep と同名) uvf '**' ERROR --no-ignore --no-ignore-files
--ignore-file <ファイル> 除外の規則を足す。何回でも書けます。一番弱いので、.ignore などの ! には負けます。名前だけの規則(*.md など)は、そのファイルを置いた場所に関係なくどこにでも当たります uvf '**' ERROR --ignore-file extra.ignore
--files 何が対象になるかを出す(最後に除外した本数) uvf '**' --files

知らせ方:

  • 検索の結果には何も足しません(grep・ripgrep と同じく黙って外します)。
  • --files の最後に「除外 N 本・フォルダー M 個(中は見ていません)」を出します。何が外れたかは --no-ignore を付けた一覧と比べれば分かります。
  • 指定が除外のせいで1件も当たらなくなったときは、「1件も当たりません: 指定(.gitignore などで除外。–no-ignore で含めます)」と出します。黙って0件にはしません。
  • --ignore-file で規則を足したときは、知らせに「–ignore-file で足した規則は –no-ignore-files で止めます」も添えます(--no-ignore だけでは足した規則は止まらないため)。

例(.gitignore に build/・*.tmp・!keep.tmp、logs/.ignore に old/ と書いてあるリポジトリ):

$ uvf '**' --files
1   app.log
2   keep.tmp
3   logs/b.log
uvf: 除外 1 本・フォルダー 2 個(中は見ていません)(.gitignore ほか。--no-ignore で含めます)

$ uvf 'build/**' --files          # 名前を書いたフォルダーは除外しない
1   build/a.log

$ uvf 'x.tmp' --files             # 名前を書いたファイルも除外しない
1   x.tmp

uvf '**/*.log' ERROR --no-ignore                # 除外せずに探す
uvf '**' ERROR --ignore-file ~/extra.ignore      # 規則を足して探す

4.8 特別な名前の書き方

名前 書き方 例
空白を含むファイル1本 そのまま書けます(全体がそのまま実在するファイルなら1本として扱います。1.7.2.7 から) uvf 'sp dir/my log.txt' ERROR
空白を含むワイルドカード1つ 最後にカンマを付けます(カンマがあると空白で区切らないため) uvf 'C:/Program Files/app/*.log,' ERROR
空白を含むものを複数 カンマで区切ります uvf 'C:/Program Files/app/*.log,D:/logs/*.log' ERROR
カンマを含む名前 カンマは区切りになるので、? に置き換えます。? はどの1文字にも当たるので、a-b.log や aXb.log があればそれも対象になります。 先に --files で対象を確かめてください uvf 'a?b.log' --files で確かめてから uvf 'a?b.log' ERROR
- で始まる名前 ./ を付けます uvf ./-debug.log ERROR
[ ] を含む名前 そのまま書けます(ワイルドカードではありません) uvf 'app[1].log' ERROR
{ } を含む名前 カンマの無い {} {a} はそのまま書けます。カンマを含む {a,b} は波かっことして広がりますが、書いたとおりの名前のファイルが実在すればそれを使います(4.5)。先に --files で確かめてください uvf 'report{1}.log' ERROR

5. 出力の形

コマンド 形
uvf app.log ERROR(1本のファイル) 行番号<TAB>本文
uvf '*.log' ERROR(複数のファイル) ファイル名:行番号<TAB>本文
uvf app.log ERROR -H 1本でも ファイル名:行番号<TAB>本文
uvf '*.log' ERROR -h 複数でも 行番号<TAB>本文
uvf app.log ERROR --json 1行に1つの JSON:{"n":行番号,"line":"本文"}
uvf '*.log' ERROR --json 複数ファイルのときは {"file":"a.log","n":…,"line":"…"}
$ uvf app.log ERROR
128 2026-09-27 10:01:02 ERROR connection reset
512 2026-09-27 10:05:44 ERROR timeout

$ uvf '*.log' ERROR
a.log:128   2026-09-27 10:01:02 ERROR connection reset
b.log:7 2026-09-27 11:00:00 ERROR disk full
  • 行番号は 1 から数えます。
  • 行末の改行が CRLF(Windows)でも、表示は本文だけです。
  • ripgrep は ファイル名:行番号:本文 ですが、uvf は行番号の後ろが TAB です。cut -f2- で本文だけを取り出せます。

6. 圧縮ファイル・Word・Excel・PDF

圧縮ファイルは、展開しながらそのまま検索します。外部のコマンド(gzip・xz など)は使いません。

形式(拡張子) コマンド uvf
.gz uvf app.log.gz ERROR 検索できます(1本でも、複数に混ぜても)
.bz2 .xz .lzma .zst .lz4 .br uvf app.log.xz ERROR 検索できます
.docx .docm .xlsx .xlsm .pdf uvf report.docx 東京 文字を取り出しながら検索できます(v1.9.0 から。6.2)
.doc .xls uvf old.doc 東京 扱えません(古い形式です。Word・Excel で .docx・.xlsx に保存し直してください)
.zip uvf logs.zip ERROR 扱えません(展開してから探してください。zip は uvp が扱います)
.pbf(OSM) uvf japan.osm.pbf 東京 扱えません(uvp が XML にして扱います)
.tar.gz uvf logs.tar.gz ERROR 扱えません(複数のファイルをまとめた tar のため。展開してから探してください)
.uwvz uvf app.log.uwvz ERROR 扱えません(UwView Pro の索引です)
それ以外 uvf app.log ERROR テキストとして扱います
  • 形式は拡張子で見分けます。 .gz なのに中身が gzip でなければ、そのことを知らせます。
  • 平文と圧縮を混ぜて、1回で探せます:uvf 'app.log,app.log.*.gz' ERROR
  • xz は、複数ブロックで作られたもの(xz 5.6 以降の既定)なら複数スレッドで展開します。

6.1 文字コード

ファイルの先頭(256KB まで)を見て、自動で見分けます。文字コードを指定するオプションはありません。

順 見分け方 文字コード
1 先頭の BOM UTF-8・UTF-16LE・UTF-16BE・UTF-32LE
2 BOM なしで UTF-8 として正しい(ASCII だけのものも含む) UTF-8
3 それ以外は Shift_JIS と EUC-JP を比べ、おかしなバイトの少ないほう Shift_JIS か EUC-JP
4 決められないとき Shift_JIS

BOM の無い UTF-16・UTF-32、UTF-32BE、そのほかの文字コード(Latin-1・GBK・ISO-2022-JP など)は見分けません。

6.2 Word・Excel・PDF(v1.9.0 から)

Word・Excel・PDF の中の文字を、取り出しながら探します。索引は作りません(元のファイルの隣には何も作りません)。1 本でも、'docs/**/*.pdf' のような複数の指定でも探せます。

uvf report.docx 東京              # Word
uvf '経費/**/*.xlsx' 交通費        # Excel(まとめて探す)
uvf 'docs/**/*.pdf' 契約 -i        # PDF
uvf 売上.xlsx 0.5 --raw            # Excel を、表示の値ではなく元の値で探す
形式 拡張子 1 行の形
Word .docx .docm 段落ごとに 1 行。表の 1 行は、セルをタブで区切った 1 行。脚注とコメントは印を付けて後ろに出します
Excel .xlsx .xlsm シート名!行番号<TAB>A列<TAB>B列…。セルは表示されている値(50% など)。--raw を付けると元の値(0.5。式は計算結果の数)で探します
PDF .pdf ページごとに ## page N の行、続けてそのページの行を読む順に(2 段組は左の段から)

出力の行番号は、取り出した文字の行の番号です(例:2<TAB>売上!2<TAB>りんご<TAB>50%)。

  • 断るもの:古い形式(.doc .xls)・パスワード付き・文字の無い PDF(画像だけのもの。OCR はしません)・壊れたもの。理由を出して、終了コード 2 で終わります。複数の指定の中にあるときは、名前を出して飛ばし、残りを探します(飛ばしたものがあれば終了コードは 2)。
  • 元の形式には書き出せません(取り出した文字は、画面で保存・コピーできます)。
  • 画面(-open)で開くと「文字を取り出して開きます」と進み具合を出し、一時フォルダーに取り出した文字を開きます。
  • Word・Excel・PDF を読む部品(PdfPig・Apache 2.0)を入れたので、uvf のコマンドは大きくなりました(約 6.7MB → 17.4MB)。

7. 正規表現(-E)

-E を付けると、検索語を正規表現として扱います。UwView は .NET の正規表現を使います。よく使う書き方は ripgrep(Rust)と同じですが、当たる範囲が変わる違いがあります(7.2)。

7.1 よく使う書き方

書き方 意味 例
. 任意の1文字 uvf app.log 'E.ROR' -E
* + ? {2,5} 0回以上・1回以上・0か1回・2〜5回 uvf app.log 'code=\d{3}' -E
[abc] [^abc] [0-9] 文字の集まり uvf app.log 'code=[45][0-9][0-9]' -E
( ) a|b グループ・どちらか uvf app.log '(ERROR|WARN) disk' -E
^ $ 行頭・行末 uvf app.log '^2026-09-27' -E
\d \w \s \b 数字・英数字(日本語も含む)・空白・語の境目 uvf app.log '\bERROR\b' -E
(?i) 大文字小文字を区別しない(-i と同じ) uvf app.log '(?i)error' -E
uvf app.log 'ERROR|WARN' -E
uvf access.log '" (4|5)\d\d ' -E
uvf app.log '^2026-09-27 1[0-2]:' -E

7.2 ripgrep との違い

書き方 uvf(.NET) ripgrep
既定の扱い uvf app.log 'a.b'(文字列そのままで「a.b」を探す。正規表現は -E) rg 'a.b' app.log(正規表現。文字列そのままは -F)
先読み・後読み uvf app.log 'ERROR(?=.*disk)' -E(使えます) rg -P 'ERROR(?=.*disk)' app.log(PCRE2 を使うとき。-P か --engine auto)
後方参照 uvf app.log '(\w+) \1' -E(使えます) rg -P '(\w+) \1' app.log(PCRE2 を使うとき。-P か --engine auto)
名前付きグループ uvf app.log '(?P<code>\d{3})' -E(uvf が (?<code>…) に読み替えます。.NET の標準の書き方は (?<code>\d{3})) rg '(?P<code>\d{3})' app.log
POSIX 文字クラス uvf app.log '[A-Za-z]+' -E([[:alpha:]] は使えません。エラーで同じ範囲の書き方を案内します) rg '[[:alpha:]]+' app.log(ASCII の英字だけに当たる)
数字・空白 uvf app.log '[0-9]+' -E(\d は全角数字にも当たる) rg '\d+' app.log(Unicode の数字)
用字(漢字・ひらがな) uvf app.log '\p{IsCJKUnifiedIdeographs}+' -E(\p{Han} は使えません。範囲も少し違う) rg '\p{Han}+' app.log

書き換えの例(1)POSIX 文字クラス → ripgrep と同じ範囲になる書き方(当たる行は変わりません):

ripgrep uvf 注意
rg '[[:alpha:]]+' app.log uvf app.log '[A-Za-z]+' -E \p{L} にすると日本語なども当たる(範囲が広がる)
rg 'id=[[:digit:]]+' app.log uvf app.log 'id=[0-9]+' -E \d にすると全角数字(12)も当たる
rg 'a[[:space:]]b' app.log uvf app.log 'a[ \t\r\n\f\v]b' -E \s にすると全角空白なども当たる

書き換えの例(2)用字(Unicode のスクリプト)→ 一致範囲が異なる代わりの書き方(.NET には用字の指定が無いので、Unicode のブロックで近い範囲を書きます。当たる文字は同じではありません):

ripgrep uvf(近い書き方) 違い
rg '\p{Han}+' app.log uvf app.log '[\p{IsCJKUnifiedIdeographs}\p{IsCJKUnifiedIdeographsExtensionA}\p{IsCJKCompatibilityIdeographs}々〇]+' -E \p{IsCJKUnifiedIdeographs} だけだと 々・〇・拡張A(㐀 など)に当たらない。拡張B 以降の漢字は、このブロック指定の書き方では含められない(.NET の正規表現は UTF-16 の1文字ずつで照合するため)
rg '\p{Hiragana}+' app.log uvf app.log '\p{IsHiragana}+' -E ブロックとスクリプトの違いで、わずかに範囲が違う(濁点の結合文字など)
rg '\p{Katakana}+' app.log uvf app.log '[\p{IsKatakana}ヲ-゚]+' -E \p{IsKatakana} だけだと半角カナに当たらない。長音符「ー」はブロックには入るがスクリプトでは共通扱い

日本語・全角文字も含めて探したいときは、\p{L}(文字)・\d(数字)・\s(空白)を使ってください。ripgrep の [[:alpha:]] などより範囲が広くなります。

7.3 決まりごと

  • 1行ずつ照合します(複数行にまたがる検索はできません)。
  • 1回の照合が 5 秒を超えたら止めます。式を見直してください。
  • 書き間違いは、探し始める前に「正規表現が正しくありません」と知らせます。
  • ファイルの文字コードに関係なく、文字として照合します。

8. GUI と組み合わせる(-open)

書き方 動き
uvf -open GUI(UwView)を起動するだけ
uvf -open app.log app.log を GUI で開く
uvf -open app.log ERROR 開いて ERROR を検索した状態にする
uvf app.log ERROR -i -E -open -i -E -v を付けた検索を GUI で表示する
uvf -open '*.log' ERROR 複数ファイルの結果を GUI で表示する(8.1)
uvf '*.log' ERROR -i -open 同じ(末尾の -open でもよい。-i -E -v も効く)
uvf -open '*.log' 検索せずに開く(番号 1 のファイルとファイル一覧だけを出す)
  • -open は先頭か末尾に書きます。--json とは一緒に使えません。

8.1 複数ファイルの結果を GUI で見る

uvf -open '*.log' ERROR と書くと、uvf がまず探し、その結果を GUI に渡します(GUI は探し直しません)。

  • 開いた直後は、番号 1 のファイルがメイン(1番目のタブ)に出ます。
  • 検索結果の窓の行番号欄は ファイル番号:行番号 です(例 3:128)。番号は --files の番号と同じです。
  • 行を選ぶと、窓の下の行に実ファイル名が出ます(選んだだけではファイルを開きません)。
  • ダブルクリック(または Enter)で、そのファイルをメインに出して、その行へ移ります(その行が中央に来て強調されます)。
  • メインに出ているファイルなら、移るだけです。
  • 追加のタブで開いているファイルなら、そのタブに切り替えて移ります(同じファイルを2つ開きません)。
  • どこにも開いていなければ、メインの中身をそのファイルに差し替えます(前のファイルは閉じます)。
  • 圧縮ファイル(gz・bz2 ほか)は、隣に展開してから開き、展開後の行へ移ります(確認の窓は出しません。展開済みで元より新しければそれを使います)。
  • Word・Excel・PDF は、一時フォルダーに文字を取り出してから開きます(「文字を取り出して開きます」と進み具合を出します。元のファイルの隣には何も作りません)。
  • 検索した後にファイルが変わっていたら、開いたうえでステータス行に「このファイルは検索した後に変わっています」と出します。ファイルが消えていたら「ファイルが見つかりません」と出します。
  • 画面に渡す件数は、設定の「1回の検索で保持する最大ヒット数」までです。無制限の設定でも 100 万件で止め、窓に「上限で打切り」と出します(本文も画面に渡すため)。

8.2 ファイル一覧とタブ

本体の「ファイル一覧」ボタン(箇条書きのアイコン。検索結果の窓にも同じボタンがあります)で、番号と実ファイルの対応表を開けます。
ボタンはアイコンで、名前はマウスを乗せると出ます(1.7.3 から。はい/いいえ・開く/閉じる・保存・中止は文字のまま)。

列 中身
番号 --files と同じ番号
ファイル 書いた形のままの名前(マウスを乗せると絶対パス)
ヒット そのファイルのヒットの件数
大きさ ファイルの大きさ
右端 メインに出ていれば「メイン」、追加のタブで開いていれば「タブ」
  • 行をダブルクリック(または Enter)で開きます。
  • 右上の 「タブで開く」 で開き方を切り替えます(状態は次に開いたときも同じ)。
  • オフ(既定):メインの中身をそのファイルに差し替え、先頭を出します。
  • オン:そのファイルを追加のタブで開きます。タブ名は 2:app-0902.log のように番号付きです。
  • タブは最大 8 個(メイン 1 + 追加 7)です。8 個開いているときは開かずに「タブは 8 個までです」と出します(古いタブを勝手に閉じません)。数えるのは、この一覧から開いたタブだけです。
  • すでに開いているファイルは、そのタブに切り替えるだけです。
  • メインのタブは閉じられません(閉じるボタンが出ません)。追加のタブは普通のタブと同じように閉じられます。
  • タブは増えても1行のままで、左右にスクロールします(ホイールでも送れます)。名前は 27 文字を越えると末尾が ... になり、マウスを重ねると切らない名前が出ます。
  • メインのタブは灰色です。追加のタブと見分けられます(1.7.3.4 から)。
  • 窓の題名は UwView(uvf)-Full Spectrum(v1.9.0) の形で、版数が分かります。
  • zip・pbf は番号だけ持ちます(探さず、開けません)。

8.3 uvf と uvp の違い(複数ファイルの GUI)

項目 uvf uvp
結果から元の行へ ファイルを開き直してから移る(大きいファイルは少し待つ) 束ねた本文の中をすぐ移る
2回目の検索 全部読み直す 索引で速い
GUI の検索欄 メインの1ファイルだけを探す(複数ファイルを探し直すのは CLI から) 束ねた全体を探す
絞り込み・集計 無い ある
zip・pbf 無い ある
Word・Excel・PDF 取り出しながら探す(索引は作らない) 隣に索引(report.docx.uwvz)を作る

9. スレッド数の調整(–tune)

検索に使うスレッド数を、この機械で実測して決めます。

uvf --tune                 # 測って、おすすめの値を表示する
uvf --tune big.log         # 手持ちの大きなファイルで測る
uvf --tune --apply         # 測った値を設定に保存する(uvf が使う。無料版の画面の検索には効きません)

たいていは既定のままで構いません。CPU の多い機械や、遅いディスクで効きます。


10. 終了コード

コード 意味
0 見つかった
1 見つからなかった
2 エラー(ファイルが無い、正規表現の誤り、指定の誤りなど)

Word・Excel・PDF で断ったもの(.doc・.xls・パスワード付き・文字の無い PDF・壊れたもの)も 2 です(6.2)。波かっこが 1,000 通りを超えたときも 2 です(4.5)。

grep・ripgrep と同じなので、シェルのスクリプトでそのまま使えます。

if uvf app.log 'FATAL' > /dev/null; then echo "FATAL あり"; fi

11. ripgrep・grep との対応表

例のファイル名は app.log、フォルダーは logs、探す語は ERROR にそろえています。

やりたいこと ripgrep uvf
文字列で探す rg -F ERROR app.log uvf app.log ERROR
正規表現で探す rg 'ERROR|WARN' app.log uvf app.log 'ERROR|WARN' -E
大文字小文字を無視 rg -F -i error app.log uvf app.log error -i
含まない行 rg -F -v DEBUG app.log uvf app.log DEBUG -v
サブフォルダーも rg -F ERROR logs/ uvf 'logs/**' ERROR
特定の拡張子だけ rg -F -g '*.log' ERROR uvf '**/*.log' ERROR
圧縮ファイルも rg -z -F ERROR app.log.gz uvf app.log.gz ERROR(-z は不要)
ファイル名を必ず付ける rg -F -H ERROR app.log uvf app.log ERROR -H
ファイル名を付けない rg -F -I ERROR logs/ uvf 'logs/**' ERROR -h
対象ファイルの一覧 rg --files logs/ uvf 'logs/**' --files(除外の規則は同じ。.rgignore は読まない)
.ignore・.gitignore に従う rg -F ERROR .(既定で従う) uvf '**' ERROR(既定で従う。4.7)
除外しない rg -F --no-ignore ERROR . uvf '**' ERROR --no-ignore
除外の規則を足す rg -F --ignore-file extra.ignore ERROR . uvf '**' ERROR --ignore-file extra.ignore
足した規則も使わない rg -F --no-ignore --no-ignore-files ERROR . uvf '**' ERROR --no-ignore --no-ignore-files
JSON で出す rg -F --json ERROR app.log uvf app.log ERROR --json(形は違います)

grep の -h(ファイル名を付けない)と ripgrep の -h(ヘルプ)は意味が逆です。uvf は grep と同じく「ファイル名を付けない」で、-h だけを書いたときだけ使い方を表示します。

向き不向き:uvf は、大きなファイルや圧縮したログを、除外に従って手軽に探し、GUI で確かめるのに向いています。
検索条件や出力の細かい指定(前後の行・件数だけ・一致した部分だけ・標準入力など)は ripgrep のほうが豊富です(11.1)。

11.1 ripgrep にあって uvf に無いもの

uvf のオプションは 3 章の表がすべてです。次の ripgrep の機能は uvf にはありません。代わりの書き方があるものは右の列に書きました。

ripgrep 内容 uvf での代わり
rg -F -C 3 ERROR app.log(-A -B も) 前後の行も出す ありません(UwView Pro の uvp app.log ERROR -C 3)
rg -F -w ERROR app.log 単語として一致 uvf app.log '\bERROR\b' -E
rg -F -x ERROR app.log 行全体が一致 uvf app.log '^ERROR$' -E
rg -F -c ERROR app.log 一致した行の数 uvf app.log ERROR | wc -l(件数は最後に「N 件」とも出ます)
rg -F -l ERROR logs/ 一致したファイルの名前だけ uvf 'logs/**' ERROR --json | jq -r .file | uniq(jq が要ります)。パスにコロンが無いなら uvf 'logs/**' ERROR | cut -d: -f1 | uniq でも(Windows の C: などでは使えない簡易な方法)
rg -F -q ERROR app.log あるかどうかだけ(見つけたら止める) uvf app.log ERROR > /dev/null(終了コードで分かる。見つけても最後まで読む)
rg -F -m 5 ERROR logs/ ファイルごとの件数の上限 ありません(全体の先頭なら uvf 'logs/**' ERROR | head -5)
rg -o 'code=\d+' app.log 一致した部分だけ出す ありません(値ごとに数えるなら uvp の -uniq)
rg -e ERROR -e WARN app.log(-f も) 複数の語 uvf app.log 'ERROR|WARN' -E(語のファイル -f はありません)
cat app.log | rg ERROR 標準入力を探す ありません(ファイルに書いてから探してください)
rg -U 'a\nb' app.log 複数行にまたがる ありません(1行ずつ照合します)
rg --hidden ERROR 隠しファイルも探す ありません(隠しファイルも名前を書けば探せます)
rg -L ERROR リンク先のフォルダーをたどる ありません
rg -t log ERROR・--max-depth・--max-filesize 種類・深さ・大きさで絞る 種類と深さはファイルの指定で(uvf '**/*.log' ERROR・uvf '*/*.log' ERROR)。大きさはありません
rg -E sjis ERROR app.log 文字コードを指定 ありません(自動で見分けます)
rg -r 'WARN' ERROR app.log 置き換えて出す ありません(UwView Pro の uvp app.log ERROR -replace WARN)
rg -0・--column・-b NUL 区切り・列番号・バイト位置 ありません

また、ファイルの指定は1つの文字列にまとめて書く形です(4章)。空白・カンマ・[ ] { } を含む名前はそのまま書けないことがあり、
既存のスクリプトからファイル名を1つずつ渡す使い方は、ripgrep のほうが向いています。


12. よくあるつまずき

症状 原因と対処
「複数のファイルが直接渡されました」 引用符を付け忘れて、シェルがワイルドカードを広げました。uvf '*.log' 語 のように囲んでください
空白を含むパスで1件も当たらない 空白で区切られています。カンマで区切ってください
*/*.log でサブフォルダーの奥が出ない * は1段だけです。奥まで探すなら '**/*.log'
[[:alpha:]] がエラー .NET の正規表現では使えません。\p{L} に書き換えてください(7.2)
正規表現のつもりが当たらない -E を付け忘れています(既定は文字列そのまま)
zip を探せない uvf は zip を扱いません。展開するか、uvp を使ってください
Word・Excel・PDF で「読めません」と出て exit 2 古い形式(.doc・.xls)・パスワード付き・文字の無い PDF(画像だけ。OCR はしません)・壊れたものは断ります。.doc・.xls は Word・Excel で .docx・.xlsx に保存し直してください(6.2)
隠しファイルが対象にならない 仕様です(4.5)
あるはずのファイルが対象にならない .gitignore・.ignore で除外されているかもしれません。--files の最後の「除外 N 本」で確かめ、含めるなら --no-ignore(4.7)
git のフォルダーでは .gitignore が効くのに、ほかでは効かない 仕様です。.gitignore は git のリポジトリの中だけで効きます。どこでも効かせるなら .ignore に書いてください

13. 性能(参考)

v1.9.0(Full Spectrum)の結果(2026-10-14・Mac。Windows・Linux は動作確認)

Mac で v1.9.0 を測った、いちばん新しい結果です(2026-10-14・Apple M4・メモリ 32GB・外付け USB SSD)。倍率は ripgrep などの秒数 ÷ uvf/uvp の秒数(cold+hot の合計)で、1.5 倍未満は同等です。

Windows・Linux でも同じテスト一式を流し、正常に動くことを確かめました(正しさのテスト:入力の種類 66 件・複数ファイル 34〜36 件・除外 43 件がすべて合格、速さの段の出力も ripgrep と不一致 0)。Windows・Linux の速さは、機械も条件も Mac と違うので参考値として右の 2 列に載せます。

ripgrep ÷ uvf/uvp(cold+hot の合計) Mac Windows(参考) Linux(参考)
3GB の 1 本・総合(30〜32 項目) 2.56 2.24 1.50
10GB の 1 本・総合(30 項目) 2.51 3.17 1.96
無料版 uvf・検索 7 種(3GB/10GB) 1.08/1.08(同等) 1.46/1.92 1.32/1.06
uvp・検索 7 種(3GB/10GB・索引作りを含む) 3.44/3.55 2.48/2.48 1.42/2.06
uvp・集計と並べ替え(3GB・10GB) 4.2〜4.9 2.0〜3.6 1.4〜3.3
uvp・Shift-JIS・EUC-JP・UTF-16(3〜6GB・2 回目から) 5.4〜38.8 2.2〜14.1 2.0〜15.3
uvp・ログの 3 例(Linux カーネル 6 万本) 2.35〜4.56 1.26〜2.48 1/2.85〜1/3.21
出力の突き合わせ 不一致 0 不一致 0 不一致 0

1 回目(索引の作成込み)は、Shift-JIS・EUC-JP で ripgrep の 1/1.4〜1/1.7 ほどです(Mac で 3 回測った幅)。展開の速い lz4 の 1 回目込みは 1/1.4 です。参考の Windows・Linux では、uvp の 1 回目・zst・lz4・複数のファイルを初めて束ねる測り方で 1.5 倍を超えて負ける値も出ました。

詳しくは v1.9.0「Full Spectrum」の記事。

この章のこの下の数字は、ことわりのない限り前の版で測った値です。

ある1台の Mac で測った例です。ディスク・CPU・データの中身によって変わります。
倍率は「ripgrep の時間 ÷ uvf の時間」で、1 を超えると uvf が速く(🟢)、1 未満(1/x と表記)は ripgrep が速い(🍊)ことを表します。1.5 倍未満の違いは「同等」と読んでください(7 つ以上の合計は 1.3 倍未満)。

13.1 測った環境

項目 値
機械 Mac(Apple M4・10 コア・メモリ 32GB)・外付け USB SSD
版 uvf 1.7.3.6。比べる相手は ripgrep 15.2.0
スレッド数 8(既定)
データ OSM(日本)の XML。1G = 979 MB、3G = 2,938 MB(1G と同じ中身を3回つないだもの)、10G = 10,255 MB、50G = 51,255 MB。検索語は「東京」
測り方 毎回 sync → キャッシュ破棄(purge)→ 10 秒待つ → 1回目(cold)→ 続けて 2回目(hot)。時間はコマンドの開始から終了まで
照合 すべての測定で、結果が ripgrep(または sed・sort・uniq などの組み合わせ)と一致することを確かめた(不一致 0)
元の記録 UwTest/mac_result/20260929-095527-cspeed(13.2 の 3G・13.3)・UwTest/mac_result/20260929-030006-suite(13.2 の 1G・13.4・13.5)。どちらも 2026-09-29

13.2 圧縮したファイルを探す(1回目+2回目の合計・秒)

ripgrep は rg -z -n -F 東京 ファイル(外部の展開コマンドを使う)、uvf は uvf ファイル 東京。各1回ずつの通常の測定です。

形式 1G:大きさ rg -z uvf 倍率 3G:大きさ rg -z uvf 倍率
平文(基準・rg) 979 MB 1.34 1.24 1.08 🟢 2,938 MB 3.67 3.54 1.04 🟢
gz 106 MB 0.94 0.78 1.21 🟢 318 MB 2.66 2.07 1.29 🟢
bz2 84 MB 16.30 15.59 1.05 🟢 251 MB 47.26 45.53 1.04 🟢
xz 84 MB 1.34 1.46 1/1.09 🍊 253 MB 3.53 3.81 1/1.08 🍊
lzma 85 MB 7.04 5.74 1.23 🟢 254 MB 20.80 16.99 1.22 🟢
zst 116 MB 1.15 1.07 1.07 🟢 348 MB 3.26 3.04 1.07 🟢
lz4 178 MB 0.72 0.64 1.12 🟢 533 MB 1.87 1.70 1.10 🟢
br 97 MB 1.77 1.45 1.22 🟢 292 MB 5.05 4.13 1.22 🟢
混在(平文4+gz・xz・zst・bz2) 538 MB 2.39 2.29 1.04 🟢 1,615 MB 6.63 6.47 1.02 🟢
混在(gz・xz・zst・bz2) 97 MB 4.37 4.17 1.05 🟢 292 MB 13.31 12.13 1.10 🟢

13.3 1回目と2回目の内訳(3G・秒)

形式 道具 1回目(cold) 2回目(hot)
平文 rg 3.34 0.33
平文 uvf 3.10 0.44
xz rg -z 1.79 1.74
xz uvf 1.92 1.89
gz rg -z 1.35 1.31
gz uvf 1.04 1.03

平文の2回目はファイルがメモリに載っているので、どちらもディスクを読みません。圧縮ファイルは2回目も毎回展開するので、1回目とほとんど変わりません。

13.4 複数のファイルをまとめて探す(1回目+2回目の合計・秒)

uvf 'osm17/*.osm' 東京 のような指定と、ripgrep の複数ファイル指定(圧縮は rg -z)の比較です。

対象 ヒットした行 ripgrep uvf 倍率
平文 6本(うち1本は 51GB の japan-latest.osm) 100,424 119.37 111.03 1.08 🟢
gz 7本 122,441 44.70 37.27 1.20 🟢
平文+gz 13本 222,865 133.66 144.64 1/1.08 🍊

13.5 大きい1本のファイル(7つの検索の合計・秒)

素の検索・-i・-E・-E 行頭つき・-E -i・-v・-E -v の7つを、それぞれ1回目・2回目と測った合計です。

データ ripgrep 1回目 uvf 1回目 ripgrep 2回目 uvf 2回目 ripgrep 合計 uvf 合計 倍率(合計)
3G 25.51 23.43 7.74 7.84 33.25 31.27 1.06 🟢
10G 78.38 75.02 23.06 18.73 101.44 93.75 1.08 🟢
50G 425.91 383.04 404.62 371.92 830.53 754.96 1.10 🟢

13.6 読み方

  • 圧縮ファイルは、7形式とも ripgrep と同等です(1/1.09〜1.29 倍)。gz・lzma・br では uvf が 1.2 倍前後速く、xz だけは ripgrep が少し速い(1G・3G とも約 8〜9%)。外部のコマンドを起動しないぶん有利なはずですが、差はどれも 1.5 倍未満です。
  • 平文は、1回目(ディスクから読む)は uvf がやや速く、2回目(キャッシュから読む)は ripgrep がやや速い(3G で 0.33 秒 対 0.44 秒)。
  • 複数のファイルも同等です(1/1.08〜1.20 倍)。平文と gz を混ぜた 13 本は、ripgrep が少し速い結果でした。
  • 大きい1本のファイルは、3G・10G・50G とも7つの検索の合計が同等です(1.06〜1.10 倍)。
  • 同じファイルを何度も調べるときは、索引を作って2回目以降を速くする UwView Pro の uvp が向いています(uvp のマニュアルの「性能」の章)。

関連

タイトルとURLをコピーしました