LinuC Level1 v10.0 対策コース(パート1)21/39
ワイルドカードと正規表現
こちらの記事ではワイルドカードと正規表現について解説します。
これらは、データの検索等において非常に強力なツールで、これらを理解し、使いこなすことで、様々なタスクを効率化することができます。
正規表現
正規表現は、主に文字列の検索や置換を行うためのパターンマッチングのための言語です。これは、Linuxのシェルスクリプトからプログラミング言語、テキストエディターまで、幅広い環境で使われています。正規表現を使うことで、複雑なパターンを指定して、そのパターンに一致する文字列を検索したり、置換したりすることが可能となります。
以下の表は、正規表現の基本的な構文とその意味を示しています。
正規表現 | 意味合い |
---|---|
.* | 0文字以上の任意の文字列に一致する |
. | 任意の1文字に一致する |
[a-z] | 'a'から'z'までの任意の小文字1文字に一致する |
[^あ-お] | 'あ'から'お'までの文字以外の任意の1文字に一致する |
(aa) | 'aa'という文字列に一致する |
aaa|bbb | 'aaa'または'bbb'という文字列に一致する |
a+ | 'a'が1回以上繰り返される部分に一致する(例: 'a'、'aa'、'aaa'など) |
\] | ']'という文字そのものに一致する(''はエスケープ文字として働く) |
正規表現の使い方
正規表現は様々な場面で使われており、例えば、Google検索でも特定の文字列を含む、または含まないウェブページを検索する際に利用されます。また、多くのテキストエディタでは正規表現を用いた検索や置換機能を提供しています。さらに、プログラミング言語でも正規表現は広く使われており、たとえばPythonではreモジュールを使って正規表現を利用できます。
以下は、いくつかの具体的な例を示しています。
# Pythonによる正規表現の使用例
import re
# 文字列中の数字をすべて取り出す
numbers = re.findall(r'\d+', 'The year is 2023 and the day is 21')
print(numbers) # Output: ['2023', '21']
# 文字列中の電子メールアドレスを取り出す
email = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', 'My email is john.doe@example.com')
print(email) # Output: ['john.doe@example.com']
ワイルドカード
ワイルドカードは、任意の文字や文字列を表すための特殊文字です。特にファイルやディレクトリの名前を指定する際に、ワイルドカードを使うと特定のパターンに一致するファイルやディレクトリを一括で指定することができます。
ワイルドカード | 意味合い |
---|---|
* | 0文字以上の任意の文字列を表す |
? | 任意の1文字を表す |
[ ] | [ ] に含まれる文字列を表す |
[! ] | [! ] に含まれない文字列を表す |
使用例
ワイルドカードを使用すると、特定のパターンに一致するファイルやディレクトリを簡単に指定することができます。以下にいくつかの具体的な使用例を示します
# カレントディレクトリのすべてのテキストファイルを検索
ls *.txt
# ファイル名に'abc'を含むすべてのファイルを検索
ls *abc*
# ファイル名が2文字以上のすべてのファイルを検索
ls ??
# ファイル形式が't'で始まるすべてのファイルを検索
ls *.t*
# /tmpディレクトリの中の全てのファイルとディレクトリを表示
ls /tmp/*
# カレントディレクトリ内をすべて削除
rm *
# カレントディレクトリ内でファイル名に「file」を含むものを削除
rm file*
# カレントディレクトリ内で「file」の後に1文字あるものを削除
rm file?
# ファイル名にtextが含まれている物を削除
rm *text*
# カレントディレクトリ内のテキストファイルを探す
find . -name *.txt
# ファイル名がapple以外のファイルを探す
find . -name '*.txt' | grep -v 'apple'
# text.txtファイルでa??cと書かれた行のみを表示
cat text.txt | grep a..c
# ファイルの中にgrapeとappleが含まれる行を表示
grep "grape" fruits.txt | grep "apple"
# 小文字を大文字に変換
echo "abcdefghijklmnopqrstuvwxyz" | tr '[a-z]' '[A-Z]'
正規表現とワイルドカードの結びつき
正規表現とワイルドカードは、どちらもパターンマッチングのためのツールですが、その使用範囲と機能は異なります。ワイルドカードは主にファイル名のパターンマッチングに使用され、正規表現は文字列のパターンマッチングに使用されます。しかし、これらは相互に補完しあうことで、より強力なパターンマッチングツールとなります。
たとえば、シェルスクリプトでは、正規表現とワイルドカードを組み合わせて使用することで、特定のパターンに一致するファイルを検索し、その内容を検索・置換するといった処理を行うことができます。
# カレントディレクトリのテキストファイルの中で、特定のパターンに一致する行を検索
grep 'pattern' *.txt
# カレントディレクトリのテキストファイルの中で、特定のパターンに一致する行を置換
sed -i 's/pattern/replacement/g' *.txt
まとめ
正規表現とワイルドカードは、それぞれが強力なパターンマッチングツールであり、これらを理解し、使いこなすことで、タスクをより効率的に行うことが可能となります。
記事の内容は理解できましたか?