すでに、テキストエディタでファイルを読むための基本的なシェルプロンプトコマンドをいくつか紹介してきました。ここで、さらにいくつか示しておきましょう。
ファイルの最初の部分だけを確認したければ、headコマンドを使用できます。コマンドの構文は以下のとおりです。
head <filename> |
Headは便利なコマンドではありますが、表示できるのが最初の数行に限られますので、ファイルの実際の長さを確認することはできません。デフォルトでは、ファイルの最初の10行だけしか読むことができませんが、次のコマンドのように数値を指定することによって、表示行数を変更することができます。
head -20 <filename> |
headと逆の働きをするのがtailです。tailを使用すると、ファイルの最後の10行を確認できます。
grepコマンドは、1つ、または複数のファイル内の特定の文字列を検索する場合に便利です。たとえばsneakers.txtファイル内の、"coffee"について言及しているすべての個所を検索するには、次のように入力してください。
grep coffee sneakers.txt |
これで、「coffee」を含むすべての行を探すことができます。
大文字/小文字に注意 | |
---|---|
特に指定がない限り、grepの検索では大文字/小文字が区別されます。つまり、Coffeeとcoffeeでは、検索の結果が異なります。ただし、grepのオプションに-iを指定すると、大文字/小文字を区別せずにファイルの検索ができます。詳細は、grepのmanページを参照してください。 |
データを保存したり、印刷してあとで読んだりする場合、パイプ機能と出力リダイレクト機能が便利です。
たとえば、ファイルの内容をgrepで検索し、その結果をファイルに保存したりプリンタに送ったりできます。
たとえば、 sneakers.txtの「coffee」を含む行をすべて印刷するなら、次のコマンドを実行するだけです。
grep coffee sneakers.txt | lpr |
名前を忘れてしまったファイルを探すにはどうしたらよいでしょうか。ワイルドカードや正規表現を利用すると、完全なファイル名を知らなくともファイルを扱うことができます。覚えている部分だけを指定し、残りの部分はワイルドカードにするのです。
ワイルドカードと正規表現の詳細は | |
---|---|
ワイルドカードと正規表現について、詳しくは、bashのmanページを参照してください(man bash)。man bash | col -b > bash.txtと入力すれば、内容をテキストファイルで保存できます。テキストファイルにすれば、lessやpicoを使って見ることができます(pico bash.txt)。印刷する場合は、かなり長大なファイルですから、そのつもりで。 |
ここでは、ファイル名を「sneak××.txt」と記憶しているとします。この場合は、次のように入力します。
ls sneak*.txt |
すると、次のファイル名が表示されます。
sneakers.txt |
検索ではアスタリスク(*)がもっともよく使われます。アスタリスクは、検索するパターンに一致するすべての対象を探し出します。したがって、
ls *.txt |
としたり、
ls sn* |
としても、sneakers.txtや名前が「sn」で始まるファイルをを検索できます。しかし、できるだけ検索結果が少なくなるようにした方がよいでしょう。
検索を絞り込むには、アスタリスクの代わりに疑問符(?)を使う方法があります。アスタリスクと同様に、?を使っても検索パターンに一致するファイルを探すことができます。
「?」の場合は、1文字に一致します。つまり、sneaker?.txtで検索すると、sneakers.txtやsneakerz.txt(このようなファイル名があれば)が表示されます。
ファイル名の一部にアスタリスク自体がある場合、たとえば、sneakers.txtをsneak*.txtとしている場合などは、正規表現を利用するとよいでしょう。
正規表現は、直感的なアスタリスクや疑問符よりも複雑です。
バックスラッシュ(\)を使うと、アスタリスクが一致するすべてのファイルの検索を意味するのではなく、ファイル名の中にアスタリスクそのものを持つファイルの検索を意味するようにできます。
たとえば、sneak*.txtというファイル名の場合は、次のようにします。
sneak\*.txt |
ワイルドカードと正規表現の簡単な一覧をあげておきましょう。
* —任意の数の任意の文字(文字列)に一致
? —任意の1文字に一致(sneaker?.txtなど)
\* —文字「*」に一致
\? —文字「?」に一致
\) —文字「)」に一致