概要
- コマンド:
egrep
、sed
- Bashの
[[ 文字列 =~ 正規表現 ]]
- 拡張正規表現
正規表現とは
柔軟な文字列検索
- 対象のテキストから、一定の規則がある文字列を探す
- 未確定の文字列でも
- ログやコマンド出力から検索
- 基本的には行単位の検索
- 検索してからの置換にも使う
例: (りんご|みかん)ジュース
- 「りんごジュース」か「みかんジュース」を一度に検索できる
用語
- パターン: 具体的な正規表現
- マッチ: パターンにテキスト内の文字列が一致
コマンドに正規表現を渡す
- Bashのパス展開と一部似ているが全く別物
- Bashの展開に注意
- 正しいパターンがコマンドに渡っているか
- 文字列「$x」を探すとき、
"$x"
だと変数展開されるので、'$x'
正規表現を渡すコマンド
egrep
コマンド
- 検索
- マッチ部分をカラー表示できたり
sed
コマンド
- 検索や置換
- ファイルの書き換えも
Bashの複合コマンド: [[ '文字列' =~ 正規表現 ]]
- マッチの有無で条件分岐
拡張正規表現を使う
原則として、当サイトでは拡張正規表現を扱う。
egrep
:grep -E
と同じsed -r
- 基本正規表現と一部表現が異なる
- 例: 基本正規表現の
a\+
は、拡張正規表現でa+
- 例: 基本正規表現の
例外コマンド: grep --perl-regexp
- Perlの正規表現を使う
egrep
コマンド
- マッチした行を出力
ファイルの例
egrep '正規表現' ファイル
コマンド出力の例
echo '文字列' | egrep '正規表現'
--only-matching
オプション
- マッチ部分のみ、マッチごとに1行ずつ出力
echo "りんごジュース、りんご果汁入り
困りんご" | egrep --only-matching 'りんご'
りんご
りんご
りんご
--invert-match
オプション
- マッチしなかった行を出力
echo "りんご
みかん" | egrep --invert-match 'りんご'
みかん