UwView シリーズ — 探す UwView・比べる UwDiff
巨大なファイルを開いて探すのは UwView、2つのファイル・フォルダを比べるのは UwDiff。どちらも Windows・macOS・Linux で動きます。→ UwDiff の操作マニュアル(CLI uvd)
コマンド操作マニュアル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 でできること
- 2. 基本の形(2つだけ)
- 3. 検索のオプション
- 4. ファイルの指定(1本・複数・ワイルドカード・除外)
- 5. 出力の形
- 6. 圧縮ファイル・Word・Excel・PDF
- 7. 正規表現(-E)
- 8. GUI と組み合わせる(-open)
- 9. スレッド数の調整(–tune)
- 10. 終了コード
- 11. ripgrep・grep との対応表
- 12. よくあるつまずき
- 13. 性能(参考)
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 |
ページごとに ## 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 のマニュアルの「性能」の章)。
関連
- uvp コマンド操作マニュアル(UwView Pro の CLI。索引で2回目から速く、絞り込み・集計・置換)
- UwView 操作ガイド(無料版の画面)・UwView Pro 操作ガイド
- 実測まとめ・ダウンロード・ヘルプ(
uvfの PATH 設定) - GitHub の原本(同じ内容):uvf コマンド操作マニュアル・v1.9.0 リリースノート