オープンソースカンファレンス2023
Online/Fall セミナープログラム
2023/9/30 13:00 〜 13:45

Linux⼊⾨セミナー︓メタキャラクタとパターンマッチ、正規表現
インターノウス株式会社（LPI-Japanアカデミック認定校）

⽵本 季史© LPI-Japan / EDUCO all rights reserved.

会社紹介、⾃⼰紹介

n会社紹介︓インターノウス株式会社
l⼈材紹介サービス、⼈材派遣/SESサービス、IT未経験者の教育及び就職⽀援サービス、法⼈研修サービス
l未経験からインフラエンジニアやプログラマーになりたい⽅へ、無料で研修と就職⽀援サービスを⾏っています。
https://engineercollege.jp/aboutn⾃⼰紹介︓⽵本 季史(たけもと ときふみ)
lIT業界で約10年間勤務後、インターノウス株式会社エンジニアカレッジ講師。
lこれまで約900⼈を未経験者からエンジニアに養成。Linuxサーバー(メール、OpenSSH、シェルスクリプト、DB、監視、演習)を担当。
lLinuCレベル1バージョン10.0の差分教材で「仮想マシン・コンテナの概念と利⽤」を執筆。
© LPI-Japan all rights reserved.

2

LinuCレベル１／レベル２ Version10.0とはl LinuCとはクラウド時代の即戦⼒エンジニアであることを証明するLinux技術者認定

ü現場で「今」求められている新しい技術要素に対応• オンプレミス／仮想化・コンテナを問わず様々な環境下でのサーバー構築• 他社とのコラボレーションの前提となるオープンソースへの理解• システムの多様化に対応できるアーキテクチャへの知⾒ü全⾯的に⾒直した「今」⾝につけておくべき技術範囲を網羅
今となっては使わない技術やコマンドの削除、アップデート、新領域の取り込みüLinuxの範疇だけにとどまらない領域までカバー
セキュリティや監視など、ITエンジニアであれば必須の領域もカバー© LPI-Japan all rights reserved.

3

クラウドを活⽤できるITエンジニアに必須の技術がまとまっている
AWSなどのパブリッククラウドを活⽤するための技術

AWSなどのパブリッククラウドを活⽤するための技術間が⽋けている状態

仮想マシン／コンテナ技術、クラウドセキュリティ、アーキテクチャ、ほかオンプレミスのサーバーサイドLinux技術

オンプレミスのサーバーサイドLinux技術【今まで／その他】

Version10.0© LPI-Japan all rights reserved.

4

本セミナーについて
l 本セミナーでは、Linuxを学び始めた⽅が難しいと感じる⽤語「メタキャラクタ」に焦点を当ててお話しします。
l まず「メタキャラクタ」とは何か︖について分かりやすく説明します。そして、しばしば混同される「ワイルドカード」や「特殊⽂字」、「パターンマッチ」、「正規表現」といった⽤語についても、整理してわかりやすく解説します。
l さらに、実際の活⽤⽅法もお伝えします。Linuxシェルでの「メタキャラクタ」を使ったパターンマッチングの⽅法や、grepコマンドを使った正規表現の実⽤例についても、具体的なステップを追って解説します。

© LPI-Japan all rights reserved.

5

本セミナーについて
l 本⽇の内容はLinuCの下記の試験範囲が該当します。
l LinuC101

l 1.02.2 基本的なファイル管理の実⾏
ll

基本的なものから⾼度なものまで、ワイルドカード規則をコマンドで使⽤する。
ファイル名のパターンマッチ

l 1.03.4 正規表現を使⽤したテキストファイルの検索
llll

いくつかの表記要素を含む単純な正規表現を作成する。
sed, regex(7)正規表現ツールを使⽤して、ファイルシステムまたはファイルの内容からの検索を実⾏する。
grep, egrep, fgrep© LPI-Japan all rights reserved.

6

本セミナーについて
l 本セミナー講師の実⾏環境
l OS︓Windows 11 x86-64
l 仮想マシン︓VirtualBox 7.0
l LinuxOS︓Almalinux 9.2(GUIインストール)© LPI-Japan all rights reserved.

7

メタキャラクタとは︖
l メタキャラクタとはl メタ︓「超えた」
l キャラクタ︓「⽂字」
l つまり、「⽂字を超えたもの」＝「通常の⽂字ではない」
l 役割を持った⽂字のことを指します。
l " $ @ & ' ( ) ^ | [ ] { } ; * ? < > ` ¥l などがあります。
l 同じような意味の⾔葉に
l 「メタ⽂字」、「特殊⽂字」などがあります。
© LPI-Japan all rights reserved.

8

メタキャラクタの使⽤場⾯

メタキャラクタは⼤きく分けてl Linuxシェル
l 正規表現で使⽤されます。

© LPI-Japan all rights reserved.

9Linuxシェルとはカーネルはコマンドを実⾏する

標準出⼒
カーネルシェル
標準⼊⼒

ユーザー「シェル」の名前の通り、⾙殻のようにカーネルを包んでいるイメージです

シェルはユーザーのコマンドをカーネルに伝える© LPI-Japan all rights reserved.

10Linuxシェルにおけるメタキャラクタ
l Linuxシェルのメタキャラクタの役割は⼤きく次の２つに分けることができます。
l パターンマッチ︓ファイル、ディレクトリ名のパターンを⼀致させるときにメタキャラクタを使います。
例えば、⼀括で複数ファイルを指定したいときはアスタリスクや疑問符などのワイルドカード（後述）を使⽤します。
l ls -l *.rpm(rpmファイルだけを⼀覧表⽰)
l cp -p *.conf backup(confファイルだけをbackupディレクトリにコピー)l パターンマッチ以外︓特定のディレクトリの場所を展開する、⽂字列を囲う、変数を展開するなどのメタキャラクタがあります。

© LPI-Japan all rights reserved.

11

ワイルドカードl 任意の⽂字や⽂字列を意味するメタキャラクタのことを特にワイルドカード（wild card）ということがあります。
l ワイルドカードとは元々トランプのポーカー、⼤富豪で他のカードの代わりになるカードを指す⾔葉で、ジョーカーが割り当てられることが多いです。
l Linuxシェルでは、アスタリスク(*)、疑問符(?)などがワイルドカードに当たります。

© LPI-Japan all rights reserved.

12Linuxシェルにおけるメタキャラクタの⼀部
⼤分類

⼩分類

ワイルドパターン カード
マッチパターン
マッチ以外
引⽤符

記号

読み⽅

機能の説明

*

アスタリスク

任意の0⽂字以上の⽂字にマッチ?

疑問符{ } 波括弧

任意の1⽂字の⽂字にマッチ[ ]内の⽂字いずれか1⽂字にマッチ- : 範囲指定 例. [a-z] ⼩⽂字のアルファベット! : 〜以外 例. [!abc] a,b,c以外{ }内のカンマで区切られた⽂字列にマッチ.

ピリオド

カレントディレクトリを展開~チルダ

ホームディレクトリを展開

|

パイプ

¥

バックスラッシュ$

変数

コマンド実⾏結果をパイプの次のコマンドに渡す
直後のメタキャラクタをエスケープ（通常⽂字として扱う）
変数を展開

'

シングルクォーテーション 囲った⽂字列を通常⽂字として扱う"

ダブルクォーテーション

囲った⽂字列を通常⽂字として扱う。変数は展開する`

バッククォート

囲った⽂字列がコマンドであれば、実⾏結果を展開[ ] ⾓括弧© LPI-Japan all rights reserved.

13

Linuxシェルによるマッチしたパターンの展開
l Linuxシェルはワイルドカードでマッチしたファイル名を展開します。
l コマンドが展開するのではなく、シェルが展開します。
# touch a.txt b.txt c.txt# ls *.txt (カレントディレクトリにある*.txtにマッチするファイルをシェルが展開。lsが展開するのではない。)(ls *.txtは、次のように展開されてから実⾏する)# ls a.txt b.txt c.txt© LPI-Japan all rights reserved.

14

Linuxシェルによるパターンマッチの例# cd /etc# ls *.conf (先頭から0⽂字以上の任意の⽂字の後、.confで終わるファイルにマッチ)# ls r?????.conf（先頭がr、任意の5⽂字の後、.confで終わるファイルにマッチ）# ls [abc]*.conf（先頭がa,b,cいずれかの⽂字の後、0⽂字以上の⽂字で.confで終わるファイルにマッチ）# ls [!a-d]*.conf（先頭がaからdの範囲ではないファイルにマッチ）# ls *[0-9]*.conf（ファイル名の途中に数字があるファイルにマッチ）© LPI-Japan all rights reserved.

15

Linuxシェルによるパターンマッチの例# cd ~（ホームディレクトリへ移動）# touch test{1,2}（test1,test2の空ファイルを作成）# ls test{1,2} （test1,test2をls）# dnf install -y httpd（httpdをインストール）# ls -l /etc/httpd/conf/httpd.conf（設定ファイルの確認）# echo cp -p /etc/httpd/conf/httpd.conf{,.org}（先頭にechoをつけると、シェルがパターンを展開する様⼦を確認できる）# cp -p /etc/httpd/conf/httpd.conf{,.org}（設定ファイルをバックアップ）# ls -l /etc/httpd/conf/httpd.conf*（バックアップできたことを確認）© LPI-Japan all rights reserved.

16正規表現におけるメタキャラクタ
l 正規表現とは、英語でregular expression。直訳すると「規則的な表現」。
l ファイル内もしくはコマンド実⾏結果から、特定のパターンに⼀致（パターンマッチ）する⽂字列を検索する表現として、正規表現があります。
l Linuxシェルと同じく正規表現でもメタキャラクタを使⽤しますが、Linuxシェルのワイルドカードより細かなマッチングができます。
l 正規表現を使⽤する代表的なLinuxコマンドにgrep,sed,awkなどがあります。

© LPI-Japan all rights reserved.

17

grepコマンドの書式

grep オプション '検索パターン' ファイル名
l 検索パターンに正規表現を使⽤します。
l 正規表現には基本正規表現と拡張正規表現があります。grepでは-Eオプションをつけることで拡張正規表現を使⽤することができます。（詳細は後述）
l 検索パターンにメタキャラクタが含まれる場合は、シェルがメタキャラクタを展開しないようにシングルクォーテーションで囲います。
l 別のコマンドとパイプを組み合わせることでコマンド実⾏結果の検索をすることもよく⾏われます。例えば、psコマンドの実⾏結果から特定のプロセスをgrepで検索します。
l ps aux | grep sshd（psコマンドの結果からsshdを含む⾏を検索）© LPI-Japan all rights reserved.

18

正規表現におけるメタキャラクタの⼀部
基本/拡張記号

読み⽅

基本
正規表現

*

アスタリスク直前の⽂字の0回以上の繰り返しにマッチ.

ピリオド

任意の1⽂字にマッチ

拡張
正規表現?

疑問符

直前の⽂字の0または1⽂字にマッチ+

プラス[]

⾓括弧

^

キャレット

直前の⽂字の1回以上の繰り返しにマッチ[ ]内の⽂字いずれか1⽂字にマッチ- : 範囲指定 例. [a-z] ⼩⽂字のアルファベット^: 〜以外 例. [^abc] a,b,c以外
⾏頭（ [ ]の外にある時 ）

$ドル

⾏末

¥

バックスラッシュ

直後のメタキャラクタをエスケープ（通常⽂字として扱う）

基本正規表現¥s

機能の説明

半⾓スペース、タブにマッチ© LPI-Japan all rights reserved.

19正規表現によるパターンマッチの例
次のテスト⽤ファイルを作成します。
# vi linuc.txt

LinuC101
LinuC102
LinuC201
LinuC202
linuC101
linuC102
LinuC101 test center
LinuC102 test center
Linu
LinuC
LinuCC
LinuCCC© LPI-Japan all rights reserved.

20正規表現によるパターンマッチの例# grep '^[Ll]inuC101' linuc.txt（先頭がLかl、続いて inuC101を含む⾏にマッチ）# grep 'LinuC[^1]0' linuc.txt（LinuCの後、1ではない数字、その後0を含む⾏にマッチ）# grep 'center$' linuc.txt（centerで終わる⾏にマッチ）# grep 'LinuC*$' linuc.txt（Linuの後のCが0回以上の繰り返しで終わる⾏にマッチ）# grep -E 'LinuC?$' linuc.txt（Linuの後のCが0か１回の繰り返しで終わる⾏にマッチ）# grep -E 'LinuC+$' linuc.txt（Linuの後のCが1回以上の繰り返しで終わる⾏にマッチ）
サーバーの設定ファイルのコメント⾏のみ抽出する（⾏頭にスペースがある場合も抽出）# grep '^¥s*#' /etc/httpd/conf/httpd.conf（先頭がスペースの0回以上の繰り返しの後に#を含む⾏にマッチ）© LPI-Japan all rights reserved.

21

同じメタキャラクタでもシェルと正規表現は意味が異なる
記号

読み⽅

Linuxシェル

正規表現* アスタリスク

任意の0⽂字以上の⽂字にマッチ直前の⽂字の0回以上の繰り返しにマッチ. ピリオドカレントディレクトリを展開

任意の1⽂字にマッチ? 疑問符

任意の1⽂字にマッチ直前の⽂字の0または1⽂字にマッチ$ ドル

変数をを展開⾏末© LPI-Japan all rights reserved.

22

シェルと同じ結果を正規表現で⾏う# cd /etc# ls *.conf(先頭から0⽂字以上の任意の⽂字の後、.confで終わるファイルにマッチ)# ls | grep '^.*¥.conf$'（先頭が任意の⽂字で0回以上の繰り返しの後に、.confで終える⾏にマッチ）© LPI-Japan all rights reserved.

23

まとめ
メタキャラクタはLinuxシェルと正規表現で使われます。
Linuxシェルではメタキャラクタをパターンマッチとそれ以外で使⽤します。
正規表現はメタキャラクタをパターンマッチのために使⽤します。
Linuxシェルでは主にファイル、ディレクトリの指定でパターンマッチを使⽤します。
l 正規表現ではファイルからの検索やコマンドの実⾏結果からの検索にパターンマッチを使⽤します。
l Linuxシェルと正規表現のパターンマッチでは同じメタキャラクタでも動作が異なるので違いを理解します。
llll© LPI-Japan all rights reserved.

24