\r\n\r\n
Linuxのlookコマンドは、ファイルを走査して、特定の単語やフレーズで始まるすべての行をリストアップします。でも、気をつけてください。Linuxのディストリビューションによって動作が異なる。このチュートリアルでは、その使い方を紹介します。
シンプルで便利なコマンドのため、この記事を調べている間、lookは私に良い説明を与えてくれました。互換性とドキュメントの2つの問題があります。
この記事は、Ubuntu, Fedora, Manjaroで確認しました。問題は、3つのケースで挙動が異なることです。Ubuntuのバージョンが大きく異なるのです。Ubuntuのマニュアルページによると、動作は同じはずです。
lookは伝統的にバイナリサーチを使うのに対し、ubuntulookはリニアサーチを使うんですね。Bionic Beaver (18.04), Co**ic cutlefish (18.10), Disco Dingo (19.04) のオンラインUbuntuマニュアルページには、Ubuntu版ではバイナリ検索を使用すると書かれていますが、実際はそうではありません。
ローカルのUbuntuのマニュアルページを見ると、その外観は線形検索を使用していることがよくわかる。強制的にバイナリサーチを使用させるコマンドラインオプションがあります。他のディストリビューションには、いずれも検索方法を選択するオプションはありません。
man lookマニュアルページをスクロールしていくと、バイナリサーチではなく、リニアサーチを使ったこのバージョンのルックについて説明しているセクションがあります。
この話の教訓は、まず現地のパンフレットのページを確認することです。
二項探索法は、線形探索よりも高速で効率的です。大容量のファイルを扱うと、これが顕著に現れます。バイナリサーチの欠点は、ファイルの並べ替えが必要なことです。ソートしたくない場合は、そのコピーをソートしてからlookで使用します。
このことは、この記事の別の場所で実証します。なお、Fedora、Manjaro、そして私が期待するほとんどのLinuxの世界では、ソートされたコピーを作成して使用する必要があります。
は、ローカルな辞書ファイル "words "だけでなく、任意のテキストファイルも扱うことができます。
Manjaroでは、このコマンドで "words "ファイルをインストールする必要があります。
sudo pacman -Syu words本稿では、エドワード・リアの詩「The Smorgasbord」のテキストファイルを使用します。
このコマンドでどんな風に見えるか見てみましょう。
less the-jumblies.txtこれは詩の最初の部分である。なお、Ubuntuを使用しているため、ファイルはソートされていない状態のままです。FedoraとManjaroでは、ソートされたコピーを使用しますが、これについては後述します。
They」で始まる行を探せば、Jumbliesが何をしたのかがわかるだろう。
look They the-jumblies.txtは、次のような行を列挙して応答する。
大文字と小文字の違いを無視するようにするには、-f (ignore case) オプションを使用します。今回も検索キーワードに「they」を使用しましたが、今回は小文字で表記しています。
look -f they the-jumblies.txtこのとき、結果には余分な行が含まれています。
最後の結果では、"THEY "で始まる行は、全角文字であり、私たちの検索キーワード "THEY" と一致しないため、表示されません。
無視する場合は、結果に含めることができます。
もし、お使いのLinuxディストリビューションのルックバージョンが、バイナリ検索を使用する従来の動作に従っている場合、ファイルをソートするか、ソートされたファイルのコピーを使用する必要があります。
今度はManjaroで、"they "を検索するコマンドを繰り返してみましょう。
ご覧の通り、結果は出ませんでしたが、詩のいくつかの行が "they" で始まることが分かっています。
ファイルを分類してみようlook で -f (大文字小文字を無視) または -d (英数字とスペースのみ) オプションを使用する場合、ファイルをソートする際に使用する必要があります。
o(出力)オプションで、ソート行を追加するファイル名を指定できます。この例では "sort.txt" となっています。
sort -f -d the-jumblies.txt -o sorted.txtsort.txtファイルを見てから、-fと-dのオプションを使ってみましょう。
これで目的の結果が得られる。
英数字やスペース以外を無視するようにするには、-d (alphanumeric) オプションを使用します。
"oh "で始まる単語があるかどうか見てみましょう。
look -f oh the-jumblies.txtは結果を返しません。
もう一度、英数字とスペース以外を無視するように指定してみましょう。つまり、句読点などの文字や記号は無視されます。
look -f -d oh the-jumblies.txt以前はこの行が見つからなかったのは、反転したカンマと感嘆符が検索を混乱させたからです。
特定の文字を終端文字として使用するようにlookに指示することができます。一般的には、スペースと行末文字が終端文字として使用されます。
t(終端文字)オプションで、使用する文字を指定することができます。この例では、アポストロフィ文字を使用します。文字列を開いていないことが分かるように、バックスラッシュで引用する必要があります。
また、検索語にはスペースが含まれるため、引用しています。私たちは2つの単語を探しています。
look -f -t \' "they call" the-jumblies.txt結果は、検索語に一致し、終端文字として使用するアポストロフィで終わる。
コマンドラインでファイル名を指定しない場合、look はワードファイルを使用します。
注文する。
以下のような結果が得られました。
ドキュメント内の "circle "から始まる単語です。
以上です。
Linuxのディストリビューションによって動作が異なることを知り、自分のバージョンがバイナリサーチを使うのか線形探索を使うのかが既に分かっていれば、とても簡単です。