joppot

コピペで絶対動く。説明を妥協しない

unix プログラミング

grepコマンドを使って正規表現を色々試してみるその1

投稿日:2014年2月15日 更新日:


reg

概要

みなさんこんにちはcandleです。今回からgrepコマンドを使って正規表現を色々試してみます。

正規表現って、使えると便利ですが、それを勉強して使いこなせている人って少ないと思います。この機会にぜひ使いこなせる様にしていきましょう。

正規表現とは言うならば、ものすごい細かい検索ができる機能でしょうか?

普通の検索でも「白+猫」と検索すれば、白と猫が引っかかる結果が表示されますよね。

それを「^白猫$」みたいによくわからない記号を加えたのが正規表現です。

正規表現はそれぞれのプログラム言語に標準的に実装されていて、phpでもjavaでもperlでも正規表現が使えます。

そうなると、それぞれの言語毎に正規表現の表現の仕方が異なるのではないか、と思われるかもしれませんが、実際は1割くらいしか変わりません。基本となる書き方を覚えておけば、後は応用でどうにでもなります。

この記事ではunixコマンドのgrepの正規表現を使って学びます。

前提

  1. あるていどのunixコマンドが使える

サンプルファイルを用意する

では、デスクトップに次の文章をr.txtという名前で保存しましょう。

正規表現(せいきひょうげん、regular expression)とは、文字列の集合を一つの文字列で表現する方法の一つである。
正則表現(せいそくひょうげん)とも呼ばれ、形式言語理論の分野では比較的こちらの訳語の方が使われる。まれに正規式と呼ばれることもある。
もともと正規表現は形式言語理論において正規言語を表すための手段として導入された。形式言語理論では、形式言語が正規言語であることと正規表現によって表せることは同値である。

先頭のメタ文字 ^ と行末のメタ文字 $

では基本となる正規表現を試していきましょう。だいたいどのサイトにも同じ様に説明されるのが行頭と行末のメタ文字です。

「^○○」は○○で始まる行を検索します。

行頭が「正規表現」で始まるものを表示しましょう。

grep "^正規表現" r.txt

そうすると行頭が「正規表現」で始まるところが抽出されます。

行末を指定したい場合は$を使います。例えば、「である。」で終わっている行を見つけたい時は下の様に検索します。

grep "である。$" r.txt

「である。」で終わっているものが、検索されました。

. 文字1文字を表すピリオド

ピリオドはなんでもよい1文字をあらわしています。ワイルドカードみたいなものです。
例えば、「正規表現」と「正則表現」の両方をgrepで見つけたい時は「規」「則」の所にピリオドを指定することで検索が可能になります。

grep "正.表現" r.txt

上を見ると分かる様に、「正規表現」も「正則表現」も検索されています。

「○○表現」というのを検索したい場合は

grep "..表現" r.txt

で検索できます。

「列で表現」というのも検索されましたね。これも確かに「○○表現」というルールに当てはまります。

|は「または」を表す

プログラミングをやっていると 縦棒は 論理式のORを表すと何となくわかるのではないでしょうか。例えば「正規表現」または「正則表現」を検索したい場合は

grep "正規表現\|正則表現" r.txt

になります。

縦棒の前にバックスラッシュがあるのは恐らくunixコマンドと混同しない様に使用していると思います。grepでは縦棒の前にバックスラッシュを置いた「 | 」を利用します。

その1まとめ

正規表現第一弾はここまでです。次回第二弾に続きます。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-unix, プログラミング
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

PEARのDBライブラリのインストールと使い方

概要 みなさんこんにちはcandleです。PEARには複数の便利なライブラリがあります。 その中の1つに実はもう古くなってあまり推奨されていませんが、データベースにつないだり、データベースの値を取得す …

fabricを使ってgit のdiffで指定のバージョンからのファイルをアップロード

概要 皆さんこんにちはcandleです。今回はfabricを使ってgit のpush pullを使わないデプロイを実装します。 一般にgit管理されているプロジェクトのデプロイは下の様な図式でデプロイ …

railsのscaffoldでremote formで送信後jsonを取得する

概要 みなさんこんにちはcandleです。 今回はrailsのformをremoteを使ってajaxした時に、 サーバに送った値をjavascript側で受け取る方法を紹介します。 ちなみに、私は下の …

macにmiddlemanの環境構築をする

概要 みなさんこんにちはcandleです。今回はmacにmiddlemanの環境構築をしてみたいと思います。 middlemanといえばwebサイト作成支援ツールみたいなものです。 githubやhe …

basscss v8以降にv7以前のスタイルを追加する(自分用メモ)

概要 みなさんこんにちはcandleです。今回はbasscssのv8でかなりデフォルトのスタイルから削除されてしまったスタイルをインポートします。 v7以降からbasscssのスタイルはかなり分割され …

  • English
  • 日本語

ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー