正規表現とは文字列のパターンの表記法で、viなどのエディタの文字列検索・置換、UNIXコマンドのファイル指定のパターンでも利用される。正規表現では一部の記号や文字にそれ自身とは異なる意味を持たせメタ文字と呼ぶ文字を使いパターンの表現に使用している。正規表現で使用されるメタ文字を表9.1[メタ文字など]に示す。
メタ文字など | 意味 |
---|---|
. | 任意の一文字 |
? | 直前の文字の0または1回の繰り返し |
* | 直前の文字の0回以上の繰り返し |
+ | 直前の文字の1回以上の繰り返し |
[-] | 範囲指定 |
[^文字] | 文字を含めない |
^ | 行頭 |
$ | 行末 |
\ | 文字をエスケープする |
{n} | 直前のパターンをn回繰り返す |
{n,} | 直前パターンとn回以上一致する |
{n,m} | 直前パターンとn回以上、m回一致する |
(パターン) | パターンをグループ化する |
パターン1|パターン2 | パターン1またはパターン2 |
正規表現には方言が多数あるので使用するアプリケーションや言語などによってメタ文字が異なるので注意。
メタ文字を複数組み合わせた場合の例を表9.2[正規表現の使用例]に示す。
例 | 意味 |
---|---|
.* | すべての文字の組み合わせ |
[a-zA-Z] | 大文字小文字を区別せず、アルファベットの任意の一文字 |
[a-z]+ | アルファベット小文字の一文字以上のすべての組み合わせ |
[1-9][0-9]* | 0より大きい整数 |
grepコマンドは正規表現を使ったファイル内文字列検索コマンドである。
grep [オプション] パターン [ファイル]
ファイルの指定にはワイルドカード等が使用でき、ファイルを省略した場合、標準入力が対象になる。
オプション | 意味 |
---|---|
-A n | 検索結果のn行後の行も表示する |
-B n | 検索結果のn行前の行も表示する |
-C n | 検索結果の前後n行も表示する |
-c | 検索結果の件数を表示する |
-E | 拡張正規表現を使用する |
-G | 基本正規表現を使用する(デフォルト) |
-H | 検索結果のファイル名を表示する |
-R,-r | 再帰的検索を実施する |
$ grep linux * $ grep -R linux * $ grep ^a /etc/passwd
findコマンドはパターンや条件に合うファイルやディレクトリを検索、その結果を使ったファイル操作のできるコマンドで、その都度ファイルを検索するので対象ファイルが多い場合は結果を得るまでに時間がかかる。
find [オプション] 検索対象パス名 [評価式]
代表的なオプション、主な評価式を表9.4[findコマンドの主な評価式]に示す。
評価式に数値は次のように扱われる。
評価式 | 意味 |
---|---|
-atime日数 | 最後のアクセス時間が指定した日数前のファイルやディレクトリを検索する |
-empty | 空のファイルや中身のないディレクトリを検索する |
-groupグループ名 | 指定したグループ名のファイルやディレクトリを検索する |
-mmin分数 | 指定した分数前に修正されたファイルやディレクトリを検索する |
-mtime日数 | 指定した日数前のファイルやディレクトリを検索する |
-nameパターン | パターンと一致するファイルやディレクトリを検索する |
-permモード | 指定したモードと一致するファイルやディレクトリを検索する |
-typeタイプ | 指定したタイプと一致するファイルやディレクトリを検索する(dはディレクトリ、fはファイル、lはシンボリックリンク) |
-sizeサイズ | 指定したサイズと一致するファイルやディレクトリを検索する |
評価式の結果に対するアクションは次の通り
アクション | 意味 |
---|---|
-ls | 検索結果を詳細に表示する |
-execコマンド{} \; | 検索結果に対して指定したコマンドを実行する。{}は検索結果のファイルやディレクトリに置き換わる。 |
カレントディレクトリ以下でちょうど一週間前に変更されたファイルやディレクトリを検索する。評価式-mtimeを使う。
$ find . -mtime 7
カレントディレクトリ以下で10分前までにアクセスされたファイルやディレクトリを検索する。評価式-aminを使う
$ find . -amin -10
カレントディレクトリ以下で今から60〜90前の間に作成されたファイルやディレクトリを検索する。
$ find . -cmin +60 -cmin -90
~/src以下で拡張子.cのファイルを探す。評価式-nameを使い、ファイル名のパターンを指定する。
$ find ~/src -name "*.c"
ホームディレクトリ内から拡張子が.txtではないファイルを探し、詳細な情報を表示する。評価式に\!を付けて否定し、さらに-lsアクションを指定する。
$ find ~/ \! -name "*.txt" -ls
パーミッションが777のファイルを探す。評価式-permを使い、モードを8進数で指定する。
$ find . -perm 777 -print
カレントディレクトリ内の0バイトのファイルを削除する。評価式-sizeとアクション-execを使用する。
$ find . -size 0 -exec rm {} \;
評価式は複数組み合わせて使用できるのでいろいろと試してみてください。