Linux正規表現の詳細ガイド

正規表現の基本

Linux環境でテキスト処理を行う際、正規表現は非常に強力なツールです。以下に主要な正規表現パターンとその説明を示します。

文字説明
\\次の文字を特殊文字、またはリテラル文字としてマークします。例えば、「n」は文字「n」に一致しますが、「\\n」は改行文字に一致します。
^入力文字列の開始位置に一致します。
$入力文字列の終了位置に一致します。
{n}nは非負整数です。正確にn回一致します。例えば、「o{2}」は「Bob」の「o」には一致しませんが、「food」の2つのoには一致します。
{n,}nは非負整数です。少なくともn回一致します。例えば、「o{2,}」は「Bob」の「o」には一致しませんが、「foooood」のすべてのoに一致します。
{n,m}mとnは非負整数で、n<=mです。最小でn回、最大でm回一致します。例えば、「o{1,3}」は「fooooood」の最初の3つのoに一致します。
*前のサブ表現に0回以上一致します。例えば、zo*は「z」、「zo」、および「zoo」に一致します。
+前のサブ表現に1回以上一致します。例えば、「zo+」は「zo」および「zoo」に一致しますが、「z」には一致しません。
?前のサブ表現に0回または1回一致します。例えば、「do(es)?」は「do」または「does」の「do」に一致します。
.「\\n」を除く任意の単一文字に一致します。
(pattern)patternに一致し、一致したサブ文字列を取得します。このサブ文字列は後方参照のために使用されます。
x|yxまたはyに一致します。例えば、「z|food」は「z」または「food」に一致します。
[xyz]文字集合です。含まれる任意の1文字に一致します。例えば、「[abc]」は「plain」の「a」に一致します。
[^xyz]否定文字集合です。リストされていない任意の文字に一致します。例えば、「[^abc]」は「plain」の「plin」に一致します。
[a-z]文字範囲です。指定された範囲内の任意の文字に一致します。例えば、「[a-z]」は「a」から「z」までの任意の小文字に一致します。

正規表現の優先順位

正規表現における演算子の優先順位は以下の通りです(上から下へ、左から右へ優先順位が低下します):

演算子説明
\\エスケープ文字
(), (?:), (?=), []括弧と角括弧
*、+、?、{n}、{n,}、{n,m}量指定子
^、$、\\任意のメタ文字アンカーとシーケンス
|選択(OR)

grepコマンドでの正規表現の使用

grepコマンドは正規表現を使用してテキストパターンを検索するための強力なツールです。以下に主要なオプションを示します。

オプション説明
-EPOSIX拡張正規表現(ERE)を使用
-GPOSIX基本正規表現(BRE)を使用
-PPerl正規表現(PCRE)を使用
-i大文字と小文字を区別しない
-n一致したテキストが含まれる行の行番号を表示
-v一致しない行を出力(反転)
-r再帰的に検索
--color=auto一致した部分を色付きで表示

grepの使用例

# 拡張正規表現を使用して"zo"のみに一致
$ echo -e "zero\nzo\nzoo" | grep -E 'zo{1}'

# "zo"で始まるすべての単語に一致
$ echo -e "zero\nzo\nzoo" | grep -E 'zo{1,}'

# "www.example.com"と"www.test.com"に一致
$ echo -e "www.example.com\nwww.sample.com\nwww.test.com" | grep -E 'www\.(example|test)\.com'

# "sample"を含まない行を表示
$ echo -e "www.example.com\nwww.sample.com\nwww.test.com" | grep -Ev 'www\.sample\.com'

sedコマンドでの正規表現の使用

sed(ストリームエディタ)は、テキストをフィルタリングおよび変換するための強力なツールです。

オプション説明
-nサイレントモード。一致した行のみを表示
-eスクリプトに複数のコマンドを追加
-f filenamefilenameファイルからコマンドを読み取る
-r拡張正規表現を使用
-i入力ファイルの内容を直接変更

sedコマンドの基本操作

コマンド説明
s行内置換
c行全体を置換
a指定した行の後に挿入
i指定した行の前に挿入
p指定した行を印刷
d指定した行を削除

sedの使用例

# ファイル内のすべての"old"を"new"に置換
$ sed -i 's/old/new/g' file.txt

# 4行目の3番目の"old"のみを"new"に置換
$ sed -i '4s/old/new/3' file.txt

# "pattern"を含む行のみを印刷
$ sed -n '/pattern/p' file.txt

# 2行目から5行目を削除
$ sed '2,5d' file.txt

awkコマンドの使用法

awkは、パターンスキャンおよび処理言語であり、特にテキスト処理に適しています。

awkの基本構文

awk [オプション] 'スクリプト' 変数=値 ファイル名
または
awk [オプション] -f スクリプトファイル 変数=値 ファイル名

awkの主なオプション

オプション説明
-F fs入力ファイルの区切り文字を指定
-v var=valueユーザー定義変数に値を代入
-f scriptfileスクリプトファイルからawkコマンドを読み取る

awkの組み込み変数

変数説明
FILENAME現在の入力ファイル名
$0現在のレコード(行)全体
$NN番目のフィールド
FS入力フィールド区切り文字(デフォルトはスペース)
OFS出力フィールド区切り文字(デフォルトはスペース)
NF現在のレコードのフィールド数
NR現在のレコード番号

awkの使用例

# ファイルの各行の1番目と3番目のフィールドを表示
$ awk '{print $1, $3}' data.txt

# コロンを区切り文字として2番目のフィールドを表示
$ awk -F: '{print $2}' /etc/passwd

# 3番目のフィールドが100より大きい行を表示
$ awk '$3 > 100' data.txt

# 行番号と内容をフォーマットして表示
$ awk '{printf "行%d: %s\n", NR, $0}' data.txt

Linux killコマンド

killコマンドは、プロセスにシグナルを送信するために使用されます。

主なシグナル

シグナル値動作
-1 (SIGHUP)設定を再読み込みして再起動
-2 (SIGINT)Ctrl+Cと同様にプロセスを中断
-9 (SIGKILL)プロセスを強制終了
-15 (SIGTERM)正常な方法でプロセスを終了

killコマンドの使用例

# プロセスID 1234を正常に終了
$ kill -15 1234

# プロセスID 5678を強制終了
$ kill -9 5678

# プロセス名でプロセスを終了
$ pkill -f "process_name"

# 特定のユーザーのすべてのプロセスを終了
$ pkill -u username

タグ: linux 正規表現 grep sed awk

5月16日 17:42 投稿