Bashの正規表現 - =~、grep、sed、awkでのパターンマッチング

=~演算子、grepパターン、sed置換、awkマッチングによるbashでの正規表現の使い方。キャプチャグループと一般的な正規表現パターンを含みます。

String Manipulation

詳細な説明

Bashでの正規表現

Bashは[[ ]]テストの=~演算子と、grepsedawkなどの外部コマンドを通じて正規表現をサポートします。

=~演算子

if [[ "hello123" =~ [0-9]+ ]]; then
  echo "数字を含みます"
fi

# キャプチャグループ
VERSION="v3.14.2"
if [[ "$VERSION" =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
  echo "Major: ${BASH_REMATCH[1]}"
  echo "Minor: ${BASH_REMATCH[2]}"
  echo "Patch: ${BASH_REMATCH[3]}"
fi

一般的なバリデーションパターン

# メールバリデーション
[[ "$email" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]

# IPv4アドレス
[[ "$ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]

# セマンティックバージョン
[[ "$ver" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]

grepでの正規表現

grep -E "error|warning|fatal" app.log
grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log

sedでの正規表現

echo "John Smith" | sed -E 's/^(\w+) (\w+)$/\2, \1/'
sed 's/<[^>]*>//g' page.html

ユースケース

bashでの正規表現は入力バリデーション(メール、IPアドレス、日付)、ログファイルの解析(タイムスタンプ、IP、エラーコードの抽出)、データ変換(フィールドの再フォーマット、値の抽出)、設定管理(複数ファイルにわたるパターンの検索と置換)に使用されます。

試してみる — Bash Cheat Sheet

フルツールを開く