【PowerShell】xliffをファイル横断検索(grep)
TradosやMemsourceといった翻訳支援ツール(CATツール)では、バイリンガル文書xliff(mxliff)というフォーマットが使用されます。
たくさんファイルがたまってくると、一括検索をしたくなることってありませんか?
もちろん、同じファイル内やプロジェクト内であれば「検索と置換」ができますが、
リンギストとしてアサインされた場合や、別の似たプロジェクト、過去案件から探したい場合などはなかなか大変です。
これをWindowsの標準機能で解決してしまいましょう。
そう、PowerShellの出番です。
【追記あり】IDEを使ってより手軽に検索出来る方法を入れました。
xliffファイルについて
xliffファイルは原文、訳文が対訳形式で保存されているxmlファイルの一種です。
ほかにも言語情報や使用ソフト、更新日時なども保存されたりしていますが、
要はテキストエディタでも開くことのできる、プレーンなフォーマットです。
こうしたファイルから一括検索(grep)するには、Select-String を使うのがよいでしょう。
Select-Stringを使う
まずは検索対象にしたいxliffファイルを特定のフォルダにコピーします。

次に、このフォルダでPowerShellを開きます。
※特定フォルダでのPowerShellの開き方は【PowerShell】使うための準備~Get-ChildItemでファイルリストを作成 を参照してください。
あとはコマンドレット Select-String を使えばOKです。

Select-String の使い方は次の通りです。
Select-String -Path 検索対象 -Pattern 検索文字列
検索対象はワイルドカードが使えます。
上ではxliffとmxliffを対象にするために、*.?xliff としていますが、
フォルダ内に検索対象ファイルしかないのであれば *.* でも問題ありません。
次に検索文字列です。
ここに入力した文字列を含む行が表示されます。
xliffは通常、原文と訳文が別の行に保存されているので、このような検索が可能です。
中国語を検索
さて、これだけで解決!と言いたいところですが、まだもう一つ問題が残っています。
そう、多言語の問題です。
この時代にあってPowerShellは(VBAも)多言語に対応しておらず、中国語が入力できません。

PowerShellの表示を変更するchcpを試してみたのですが、
- UTF-8(65001)
- GB2312(936)
- GB18030(54936)
- Big5(950)
など、どれもうまくいきません。
検索結果は中国語でも表示されるのに……
というわけで仕方がありません。別のテキストファイル(list.txt)に一旦保存して、Get-Content で読み込むことにします。
$search = Get-Content list.txt -Encoding "UTF8"
Select-String -Path *.* -Pattern $search
ちょっと面倒ですが、これで無事解決できました。
おそらくですが、この方法であれば、どんな言語でも実行できるはず。
Select-Stringチートシート こだわり検索
Select-String には-Pathと-Pattern以外にも使用できるオプションがあります。
これを使うことで、より細かな検索が可能です。
エイリアス
- sls
オプション
オプション | 引数 | 説明 |
*-path | 1つまたは複数の文字列 | 対象となるファイルパスです。 フォルダ内の全てのファイルが対象の場合、*.*でOkです。 |
*-patten | 1つまたは複数の文字列または正規表現 | 検索したい文字列です。 カンマで区切って複数の指定も可能です。 |
-NotMatch | なし | パターンに「一致しない」行のみを取り出すようになります。 |
-CaseSensitive | なし | アルファベットの大文字・小文字を区別するようになります。 |
【課題】お手軽コマンドに……
次回はここで紹介した、読み込み~検索までの効率化のため、処理のパッケージ化をしたいと思います。
具体的にはテキストファイルに羅列された文字列を順に検索し、
結果を別ファイルに保存しておけるようにするつもりです。こうご期待!
【2022/6/13追記】プログラミング用のIDEを使えば一発だった
さて、上でやったように、xliffなんていくら情報が多くてもプレーンテキストの状態で保存されているものです。また、これはTMXやTBXも同じ。ということは、一つのフォルダにまとめて入れておけば、IDEのフォルダ内一括検索が使えることに気がつきました。
下図はVisual Studio Codeを使ってみた例ですが、他にもSublime TextやAtom Editorでも同様の検索ができます。しかも正規表現による検索も簡単と来ています。

ここで紹介したIDEは、どれも無料で入手できるものばかり。
ぜひ活用してみてくださいね!

MS Office Wordと接続。軽量型でWYSIWYGを実現